【发布时间】:2011-01-19 13:43:58
【问题描述】:
if 语句中是否可以有多个一元运算符。这是给我错误的代码 sn-p。
请更正此处的代码。
if [ -f $input_file ] -a [ -f $output_file ] -a [ -f $log_file ] ]
then
### Some Code here
fi
【问题讨论】:
标签: bash if-statement syntax unary-operator
if 语句中是否可以有多个一元运算符。这是给我错误的代码 sn-p。
请更正此处的代码。
if [ -f $input_file ] -a [ -f $output_file ] -a [ -f $log_file ] ]
then
### Some Code here
fi
【问题讨论】:
标签: bash if-statement syntax unary-operator
if [ -f "file1" -a -f "file2" -a "file3" ]; then
#some code
fi
【讨论】:
[ 是一个命令,不是if 语句的一部分。因此,您应该将每个适当的参数传递给它,而不是像您一样尝试错误地运行它。
if [ arg1 arg2 arg3 arg4 ... ]
then
【讨论】:
/usr/bin 中的类似命令 [,尽管 [ 通常是内置 bash。
您只能将[ ... ] 运算符视为test ... 的快捷方式。选项的使用方式相同。
因此,在您的情况下,您可以编写 ghostdog74 方式或:
if [ -f $input_file ] && [ -f $output_file ] && [ -f $log_file ]
then
### Some Code here
fi
【讨论】:
[ ... ] 内的双引号内很重要,以防止分词引起的事故以及变量评估为空的可能性。但是,在 Bash 特定的 [[ ... ]] 中,双引号是可选的。
如果你使用 Bash 的双括号,你可以这样做:
if [[ -f "$input_file" && -f "$output_file" && -f "$log_file" ]]
我发现它比此处显示的其他选项更易于阅读(但这是主观的)。但是,它有other advantages。
而且,正如 ghostdog74 所示,您应该始终引用包含文件名的变量。
【讨论】: