我正在运行一个小bash脚本,但我不明白为什么它要进入if块,即使条件应该为false。
$ cat script.sh
#!/bin/bash
if [[ "$@"="-h" || "$@"="--help" ]]
then
echo 'Show help'
exit
fi
echo 'Do stuff'
$ ./script.sh
Show help
$ bash -x script.sh
+ [[ -n =-h ]]
+ echo 'Show help'
Show help
+ exit
$ bash -x script.sh -option
+ [[ -n -option=-h ]]
+ echo 'Show help'
Show help
+ exit
那么,为什么当我没有传递任何参数时,
$@
等于-n
?同样,即使是这样,-n =-h
如何计算为真?当我传递一个参数-option
时,为什么它也被计算为true? 最佳答案
空白是重要的。[[
的参数之间必须有空格。
if [[ "$@" = "-h" || "$@" = "--help" ]]
另外,
"$@"
表示“所有命令行参数”。最好只检查一个参数。if [[ "$1" = "-h" || "$1" = "--help" ]]
值得一提的是,
[[
中的变量扩展不必被引用。这并不伤害你,引用你的变量实际上是一个很好的习惯,但如果你想你可以删除引号。if [[ $1 = -h || $1 = --help ]]
关于bash - 语句行为异常,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32810248/