我从视频中学习了一个shell代码,并且有一个代码:
#!/bin/sh
i=1
while true
do
echo $i
i='expr $i + 1'
done
上面的代码给出的输出是:
1
expr $i + 1
expr $i + 1
expr $i + 1
......
但是在视频中输出是一致的数字,为什么相同的代码显示不同的结果?
答案 0 :(得分:2)
正如评论中提到的,你的引号错误;视频会有反引号(`
,ASCII 96),而不是单引号('
,ASCII 39)。
此外,使用这种过时语法进行命令替换或expr
的任何事情都至少落后了20年,应该避免使用现代POSIX结构。
#!/bin/sh
i=1
while true
do
echo "$i" # Note proper quoting
i=$((i+1))
done
在Bash中,你可以使用大括号扩展或C风格的for
循环,但这些循环不能移植到现代sh
。
如果您需要将代码移植到POSIX之前的系统,我的建议仍然是首先学习现代构造,特别是对于像这样的简单代码(在生产系统中你可能想要使用Awk或Perl)无论如何,这样的循环。)