[:缺少`]';在bash脚本中

[:缺少`]';在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

因此,我正在编写一个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 || $# -eq 1 ]]

double brace关键字是一个bash表达式,不能用于其他POSIX shell,但它也有一些好处,比如能够更容易地执行这些类型的操作


当然,有很多方法可以测试传递的参数数量。只要有
$2
就可以回答您的问题。

在某些情况下,即使一切都像上面提到的@kojiro一样正常,也会发生此错误。在这种情况下,简单而适当的换行将有所帮助
if语句
在您使用
|
进行检查的地方应该有一个与前一行代码的换行符。

可能会有所帮助。由于
|
分隔了两个命令,
[
$#
-eq
0
的值作为其参数。为了保持语法的假象,
[
需要“匹配”
]
作为其最终参数。有关
[]
[[]]
之间差异的更多信息,请参阅。
! { [ $# -eq 0 ] || [ $# -eq 1 ]; }
! [ $# -eq 0 -o $# -eq 1 ]