bash脚本中的[:missing`]'

Maj*_*320 0 bash brackets sh

所以我正在编写一个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
Run Code Online (Sandbox Code Playgroud)

但是当我运行它时,它会说"[:missing`]'".我没有看到失踪,除了; 正在触动],所以我错过了什么?

e-e*_*e-e 16

就我而言,我收到以下错误:

if [ $# -eq 1]; then

1请注意,和 之间没有空格]。添加空格修复了错误。

  • 添加空间对我有用。就我而言,我使用了像 `[ ! -d“报告文件”] && mkdir 报告文件 && chmod 777 报告文件`,它会抛出错误:-bash:[:缺少]'。在文件夹名称后添加空格后 [! -d“报告文件”]`它有效。 (2认同)

koj*_*iro 11

您不能||在单括号测试表达式中使用运算符.你必须这样做

! [[ $# -eq 0 || $# -eq 1 ]]
Run Code Online (Sandbox Code Playgroud)

要么

! { [ $# -eq 0 ] || [ $# -eq 1 ]; }
Run Code Online (Sandbox Code Playgroud)

要么

! [ $# -eq 0 -o $# -eq 1 ]
Run Code Online (Sandbox Code Playgroud)

double-brace关键字是一个bash表达式,不能与其他POSIX shell一起使用,但它也有一些好处,例如能够更可读地执行这些操作.

当然,有很多方法可以测试传递的参数数量.仅仅存在也$2将回答你的问题.

  • 有关“[ ]”和“[[ ]]”之间差异的更多信息,请参阅 [BashFAQ #31](http://mywiki.wooledge.org/BashFAQ/031)。 (2认同)