我看到过类似的帖子,其中由于if语句中的空格错误而引发“找不到命令”错误。
我找不到空白错误。他们在哪?还有什么呢?
基本上,如果我不带标志地运行test.sh(下图),则终端会开始大喊粗鲁的行为,例如“找不到命令”。如果我使用标志,它会很好玩。我不想一直用旗标贿赂。长期健康对身体不好。
这是在test.sh中:
verbose='false'
aflag=''
bflag=''
sflag=''
files=''
while getopts 'absf:v' flag; do
case "${flag}" in
a) aflag='true';;
b) blag='true' ;;
s) sflag='true' ;;
f) files="${OPTARG}" ;;
v) verbose='true';;
*) error "Unexpected option ${flag}" ;;
esac
done
# ======= Below this is where the error gets thrown
if "$sflag" ;
then
echo "okay" ;
fi
# ======= end error throwing code
echo "end" # this prints just fine
我运行上面的脚本
$ bash test.sh
然后我回来
test.sh: line 17: : command not found
end
有人能给我一些有关如何使bash表现合理的建议吗?
我正在使用Mac(我不知道这有什么区别)。
错误是您没有传递任何标志,因此整个while getopts
循环永远不会运行,您的$sflag
空白为空,因此,bash实际运行的是:
if ""; then echo "okay" ; fi
最简单的解决方案是将变量初始化为false:
verbose='false'
aflag='false'
bflag='false'
sflag='false'
files='false'
while getopts 'absf:v' flag; do
case "${flag}" in
a) aflag='true';;
b) blag='true' ;;
s) sflag='true' ;;
f) files="${OPTARG}" ;;
v) verbose='true';;
*) error "Unexpected option ${flag}" ;;
esac
done
# ======= Below this is where the error gets thrown
if "$sflag" ;
then
echo "okay" ;
fi
# ======= end error throwing code
echo "end" # this prints just fine
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句