最近我遇到了一个不寻常的echo用来在客户端的ksh脚本中分配变量。
例如,有许多实例,例如以下
a='something'
b='else'
c=`echo "${a} ${b}"`
我一直无法想出有人可能会这样做的原因。
这可能有一些遗留原因吗? (我已经做了30多年的壳,从来没有见过这个)
或者只是无知?
答案 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