经过几个小时的与脚本交战之后,我将问题缩小到了下面的范围。在命令提示符下运行这个(庆典),以显示该问题:涉及sed和反引号的shell脚本怪异
bash$ echo "\n"
\n
bash$ echo "\n" | sed 's/\\n/---\\&/g'
---\\n
bash$ str=`echo "\n" | sed 's/\\n/---\\&/g'`
bash$ echo $str
\n
bash$
我不明白为什么海峡= ...
命令并不等同于海峡=在...
命令的输出。
为什么它不等于str =“--- \ n”?
我必须在这里丢失一些基本的东西。
编辑:在回应评论:
$ /bin/bash --version
GNU bash, version 4.2.8(1)-release (x86_64-pc-linux-gnu)
Copyright (C) 2011 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
还,解决方案不是简单的答案,说明只有在反引号返回管道的第一部分。
注意:
bash$ str=`echo "abc" | sed 's/a/---&/g'`
bash$ echo $str
---abc
bash$
所以不知它是事物包括\这是造成问题的字符的组合。我无法弄清楚这里的行为。
谢谢。我仍然想知道发生了什么,但是这个提示(以及将读取命令更改为读取-r)修复了我的脚本。谢谢! – CuriousJackie
好的,我添加了解释。 –