为什么有人会使用echo为bash或ksh中的变量赋值?

时间:2016-06-08 16:11:30

标签: linux bash shell ksh

最近我遇到了一个不寻常的echo用来在客户端的ksh脚本中分配变量。

例如,有许多实例,例如以下

a='something'
b='else'
c=`echo "${a} ${b}"`

我一直无法想出有人可能会这样做的原因。

这可能有一些遗留原因吗? (我已经做了30多年的壳,从来没有见过这个)

或者只是无知?

2 个答案:

答案 0 :(得分:3)

无论是在当前的bash,还是其POSIX sh或Bourne前辈中,都没有令人信服的理由。

c="$a $b"

...是给出的代码的完全替代,并且运行得更快(尝试将其置于循环中;命令替换,由反引号创建,将新shell作为子进程分叉并读取其stdout - a高开销操作)。

答案 1 :(得分:0)

你看到的是一个错误使用echo的例子,因为c可以声明为:

c="$a $b"

echo的常见用法是当您需要命令来过滤输出时,例如

$ line="100090 $100,00 Mary"
$ name=`echo "$line" | grep -Eo "[a-zA-Z]+$"`
echo $name
Mary

但如果你根本不使用echo会更有效率。上面的相同内容可以通过“read”完成,而无需创建新进程:

$ line="100090 $100,00 Paul"
$ read -r _ _ name _ <<<"$line"
echo $name
Paul