indyK1ng:“#”不被视为注释,因为“$”转义了下一个字符。“$#”是一个内部变量,表示当前上下文中存在的位置参数的数量。这可以被认为是 shell 脚本的命令行参数的数量,但是可以使用内置的“set -- [args]”重置该数组。
Joakim Elofsson:if 语句的整体结构是正确的,“;” 仅在“then”之前和“fi”之前需要,如果它们没有在单独的行中列出。
问题是“0”和括号之间的空格。Bash 要求用于分隔条件表达式的括号至少在表达式中使用一个空格。
if [ $# -eq 0] || [ $# -gt 2 ] # Wrong
if [ $# -eq 0 ] || [ $# -gt 2 ] # Correct
另外需要注意的是,这两个条件表达式可以组合使用。运营商协会将确保一切顺利。
if [ $# -eq 0 -a $# -gt 2 ] # Even Better
我倾向于更喜欢用双括号提供的扩展功能来进行表达式评估。请注意,这两个评估的组合是使用不同的运算符完成的。我发现这更具可读性。
if [[ $# -eq 0 || $# -gt 2 ]] # My preference
稍后在脚本中,不建议使用单括号进行整数加法。单括号将表达式评估为布尔值。双括号用于整数数学。
echo $[ $1 + $1 ] # Evaluation of an expression
echo $(( $1 + $1 )) # Integer math