问题
Is it possible to have multiple unary operators in if statements.. Here is the code snippet which is giving me error.
Please correct the code here.
if [ -f $input_file ] -a [ -f $output_file ] -a [ -f $log_file ] ]
then
### Some Code here
fi
回答1:
if [ -f "file1" -a -f "file2" -a "file3" ]; then
#some code
fi
回答2:
If you use Bash's double-bracket, you can do this:
if [[ -f "$input_file" && -f "$output_file" && -f "$log_file" ]]
which I find cleaner to read than other options shown here (but that's subjective). However, it has other advantages.
And, as ghostdog74 shows, you should always quote variables containing filenames.
回答3:
You can see the [ ... ]
operator only as a shortcut for test ...
. The options are used th same way.
So in your case you could either write the ghostdog74 way or :
if [ -f $input_file ] && [ -f $output_file ] && [ -f $log_file ]
then
### Some Code here
fi
回答4:
[
is a command, not part of the if
statement. As such you should pass it each of the appropriate arguments instead of trying to incorrectly run it as you have.
if [ arg1 arg2 arg3 arg4 ... ]
then
来源:https://stackoverflow.com/questions/2309849/multiple-unary-operators-in-an-if-statement