Expr并计入shell

时间:2016-08-11 03:30:05

标签: shell

我从视频中学习了一个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
......

但是在视频中输出是一致的数字,为什么相同的代码显示不同的结果?

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)无论如何,这样的循环。)