为什么我得到
./6_sum_square_difference.sh: 11: ./6_sum_square_difference.sh: Illegal number: {1..3}
为了
#!/bin/sh
summing () {
the_total=0
num_in=$1
for one_num in {1..$num_in}
do
printf "aaaa\n"
the_total=$((the_total+one_num)) # <-- Line 11
done
}
summing 3
if [[ $the_total == 6 ]]; then
echo "equa to 6 "$the_total
else
echo "NOT equal to 6"
fi
printf "total= "$the_total
答案1
{1..$num_in}
是 kshism/zshism。你应该写:
`seq $num_in`
注意:虽然 bash 支持像{1..3}
1_CR 在注释中所说的那样的代码,但{1..$num_in}
在 bash 中不起作用,因为大括号扩展先于参数替换。因此,它可能来自 ksh93 或 zsh,它可以在其中工作,因为参数扩展首先完成。
答案2
因为{1..$num_in}
没有扩展到数字序列,所以它只扩展到文字字符串,如{1..1}
,{1..2}
等等。因此,您的脚本执行算术扩展,它看到一个无效数字,并打印错误消息。
当您使用 shebang 作为 时#!/bin/sh
,它取决于系统使用/bin/sh
链接到哪个 shell 来运行脚本。因此,错误消息可能会根据 shell 的不同而有所不同。
和dash
:
$ dash test.sh
aaaa
test.sh: 74: test.sh: Illegal number: {1..3}
和bash
:
$ bash test.sh
aaaa
test.sh: line 74: {1..3}: syntax error: operand expected (error token is "{1..3}")
NOT equal to 6
total= 0
与pdksh
和mksh
:
$ pdksh test.sh
aaaa
test.sh[77]: {1..3}: unexpected '{'
NOT equal to 6
total= 0
和yash
:
$ yash test.sh
aaaa
yash: arithmetic: `{1..3}' is not a valid number
posh
即使通过分段错误:
$ posh test.sh
aaaa
test.sh:77: {1..3}: unexpected `{'
Segmentation fault
该脚本将与zsh
和 一起使用ksh93
:
$ zsh test.sh
aaaa
aaaa
aaaa
equa to 6 6
total= 6