2

我有以下命令来检查文件是否存在,如果不可用则创建它:

if test "${LOG_FILE:=}x" != "x"; then
    touch $LOGAP
    exit_code=$?
fi

请帮助我理解这个脚本,如何使用测试条件"${LOG_FILE:=}x" != "x"来检查是否存在。我正在使用 bash shell。

4

1 回答 1

4

基本思想
脚本检查是否$LOG_FILE设置了变量。如果是,它会触及名称存储在$LOGAP.

解释
让我们拆分它:

test == if

所以

if test "${LOG_FILE:=}x" != "x"; then

是相同的

if [ "${LOG_FILE:=}x" != "x" ]; then

让我们做一个测试:

LOG_FILE="FILE_TEST"
echo "${LOG_FILE:=}x"

将输出

FILE_TESTx

所以它所做的是检查LOG_FILE是否设置了变量。如果设置了,

[ "${LOG_FILE:=}x" != "x" ]

将会

[ "FILE_TESTx" != "x" ]

这是真的。

如果LOG_FILE没有设置,

[ "${LOG_FILE:=}x" != "x" ]

将会

[ "x" != "x" ]

这是错误的。

就是说是x有什么开始的。你可以把它改成

[ "${LOG_FILE:=}HELLO_MY_NAME_IS_BLABLA" != "HELLO_MY_NAME_IS_BLABLA" ]

最后,你有一个

touch $LOGAP

这将touch(如果未创建则创建文件,如果已存在则更新修改日期)。它还需要设置变量$LOGAP


不得不说,检查文件是否存在的最快方法是:

if [ ! -f /tmp/foo.txt ]; then
 ...
fi
于 2013-03-29T13:27:43.630 回答