运行 bash 脚本时出现“0:未找到命令”错误

运行 bash 脚本时出现“0:未找到命令”错误

这是我的脚本:

echo "please enter any number"
read n
a= $(($n % 2))
if [ $a -eq 0 ]; then
    echo "EVEN"
else
    echo "ODD"
fi

这是脚本的输出:

$ source first.sh 
please enter any number
2
0: command not found
ODD

就像我给出的任何值都只有其他部分会被执行。

这里错误的原因可能是什么?

答案1

问题在于 后面的空格a=。变量赋值应该是a=$(($n % 2))

一般来说,空格在 Bash 脚本中很重要。如所述cas 的回答在这个相关的Unix 和 Linux 问题(我认为值得一看):

  • 没有被空格分隔的内容被视为一个“单词”。

  • 由一个或多个空格字符分隔的内容被视为两个(或更多)单词。

这具有有趣的含义,即如果将变量赋值写为a=$(($n % 2)),则紧挨着的值=,即,将按预期$(($n % 2))分配给。a

但是,如果变量赋值写为 ,a= $(($n % 2))则 旁边的值=只是一个空格,它将被分配给a。 Bash 将a视为环境变量将其设置为空字符串的值,然后继续计算$(($n % 2)),根据 的值,结果n0或。这就是为什么您会根据情况得到或 的1错误。0: command not found1: command not found

之后,脚本将继续执行该语句。由于值为空字符串,if-else表达式始终返回以下错误(您的问题中未显示):[ $a -eq 0 ]a

[: -eq: unary operator expected

因此,最后该else部分将始终得到执行,因此您的脚本将始终返回ODD

答案2

Bash 有自己的有用选项来确定发生了什么。-v 将每行回显为已读,-x 打印出执行的行(在变量替换等之后)

$ bash -vx first.sh
bash -vx first.sh
echo "please enter any number"
+ echo 'please enter any number'
please enter any number
read n
+ read n
4
a= $(($n % 2))   
+ a=           <======As a comment mentioned, a space causes problems
+ 0
first.sh: line 3: 0: command not found
if [ $a -eq 0 ]; then
    echo "EVEN"
else
    echo "ODD"
fi
+ '[' -eq 0 ']'
first.sh: line 4: [: -eq: unary operator expected
+ echo ODD
ODD

相关内容