[:缺少`]';在bash脚本中
因此,我正在编写一个bash shell脚本,我的前几行代码如下所示:[:缺少`]';在bash脚本中,bash,sh,brackets,Bash,Sh,Brackets,因此,我正在编写一个bash shell脚本,我的前几行代码如下所示: if ! [ $# -eq 0 || $# -eq 1 ]; then echo -e "Usage: myScriptName [\e[3mdir\e[0m] [\e[3m-f file\e[0m]" exit 1 fi 但当我运行它时,它会显示“[:missing`]”。我看不到一个失踪的女孩,除了这个女孩什么都没有;在单括号测试表达式中不能使用像|这样的运算符。你必须这样做 ! [[ $# -eq 0
if ! [ $# -eq 0 || $# -eq 1 ]; then
echo -e "Usage: myScriptName [\e[3mdir\e[0m] [\e[3m-f file\e[0m]"
exit 1
fi
但当我运行它时,它会显示“[:missing`]”。我看不到一个失踪的女孩,除了这个女孩什么都没有;在单括号测试表达式中不能使用像
|
这样的运算符。你必须这样做
! [[ $# -eq 0 || $# -eq 1 ]]
或
或
double brace关键字是一个bash表达式,不能用于其他POSIX shell,但它也有一些好处,比如能够更容易地执行这些类型的操作
当然,有很多方法可以测试传递的参数数量。只要有
$2
就可以回答您的问题。在某些情况下,即使一切都像上面提到的@kojiro一样正常,也会发生此错误。在这种情况下,简单而适当的换行将有所帮助if语句
在您使用|
进行检查的地方应该有一个与前一行代码的换行符。可能会有所帮助。由于|
分隔了两个命令,[
将$#
、-eq
和0
的值作为其参数。为了保持语法的假象,[
需要“匹配”]
作为其最终参数。有关[]
和[[]]
之间差异的更多信息,请参阅。
! { [ $# -eq 0 ] || [ $# -eq 1 ]; }
! [ $# -eq 0 -o $# -eq 1 ]