bash shell script syntax error
本问题已经有最佳答案,请猛点这里访问。
我用bash脚本编写了一个函数。但是,它在抱怨语法。我真的看不见是什么……错误消息为[:缺少"]"
1 2 3 4 5 6 7 8 9 10 11 | addem() { if [ $# -eq 0] || [ $# -gt 2 ] then echo -1 elif [ $# -eq 1 ] then echo $[ $1 + $1 ] else echo $[ $1 + $2 ] fi } |
在第一个
更改:
收件人:
埃多克斯1〔2〕
尝试:
1 | if [ $# -eq 0 ] || [ $# -gt 2 ] |
(0和之间没有空格。)
indyk1ng:""不被视为注释,因为"$"转义了下一个字符。"$"是一个内部变量,表示当前上下文中存在的位置参数的数量。这可以被认为是shell脚本的命令行参数数量,但是可以使用内置的"set--[args]"重置该数组。
Joakim Elofsson:if语句的总体结构正确,只有在"then"之前和"fi"之前才需要";",如果这些语句没有单独列出。
问题是"0"和括号之间的空间。bash要求用于分隔条件表达式的括号至少与表达式之间有一个空格。
1 2 3 | if [ $# -eq 0] || [ $# -gt 2 ] # Wrong if [ $# -eq 0 ] || [ $# -gt 2 ] # Correct |
另外,可以组合这两个条件表达式。运营商协会将确保一切顺利进行。
1 | if [ $# -eq 0 -a $# -gt 2 ] # Even Better |
。
我倾向于使用带有双括号的扩展功能来进行表达式评估。请注意,两个评估的组合是用不同的运算符完成的。我觉得这个更易读。
1 | if [[ $# -eq 0 || $# -gt 2 ]] # My preference |
在脚本后面,不建议使用单括号进行整数加法。单括号将表达式计算为布尔值。双parens用于整数数学。
1 2 3 | echo $[ $1 + $1 ] # Evaluation of an expression echo $(( $1 + $1 )) # Integer math |
。
我将使用如下所示的扩展测试结构(bash)。我认为这将减少字符数并提高可读性(至少对于程序员而言)。-)
1 2 3 4 5 6 7 8 9 10 11 | addem() { if (( $# == 0 || $# > 2 )) then echo -1 elif (( $# == 1 )) then echo (( $1 + $1 )) else echo (( $1 + $2 )) fi } |
。
bash对空间很敏感。在第一行中,将if[y-eq x]替换为[y-eq x](在"]"之前的空格)
您应该避免使用括号,而是使用
1 2 3 4 5 6 7 8 9 | if test $# -eq 0 || test $# -gt 2 then echo -1 elif test $# -eq 1 then echo $(( $1 + $1 )) else echo $(( $1 + $2 )) fi |
号
获得一个更好的贝壳风格会使你更好。:)