所以我正在编写一个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请注意,和 之间没有空格]。添加空格修复了错误。
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将回答你的问题.