使用 bash 命令语法:
echo "The*quick*brown*fox"|sed s/*/\\n/g
我得到了所需的输出:
The
quick
brown
fox
然而在脚本中:
IN_TXT="The*quick*brown*fox"
OUT_TXT=$(echo $IN_TXT|sed s/*/\\n/g)
echo $OUT_TXT
我得到空白:
The quick brown fox
我究竟做错了什么?
答案1
OUT_TXT
当您将变量与 一起使用时,您没有引用该变量echo
。这会导致 shell 将变量的值拆分为空格、制表符和换行符转换为单词,然后作为参数给出echo
(另外进行文件名通配扩展之后)。 echo
然后输出这些参数,参数之间有空格。
始终引用变量扩展:
echo "$OUT_TXT"
另请注意,您在echo $IN_TXT
.如果变量的扩展IN_TXT
未引用为"$IN_TXT"
,则其值将用作通配模式,并将替换为任何匹配的文件名(IN_TXT='*'
例如,使用 进行测试)。
您的表达中也存在类似的问题sed
,因为它没有正确引用。
也可以看看:
另外,您的sed
命令最好按照sed 'y/*/\n/'
标准sed
编写不能使用s///
命令插入换行符(GNUsed
是一个例外)。命令sed
y///
做知道如何将单个字符更改为换行符,无论sed
使用什么实现。
或者,您可以简单地使用tr
命令 as tr '*' '\n'
,或在 shell 中进行快速变量替换:
printf '%s\n' "${IN_TXT//\*/ }"
或者,
OUT_TXT=${IN_TXT//\*/ }
printf '%s\n' "$OUT_TXT"