脚本中无法替换空白字符

脚本中无法替换空白字符

在 shell 脚本中,我尝试使用此命令将空格替换为 \n

echo -e $var |tr ' ' '\n'

在脚本之外,它运行完美,但在脚本内部却没有效果。这是我在脚本中的使用方式:

var =$(echo -e $var | tr ' ' '\n' )

谢谢 。

答案1

在扩展参数扩展 ( $var) 或命令替换 ( $(cmd)) 后,shell 会从扩展结果中删除所有空格,以便将它们拆分为单词(单词拆分)。除此之外,它还会尝试匹配包含*?和/或 的单词的文件名[...](路径名扩展)。因此总是将扩展括在双引号("$var""$(cmd)")中,以避免尝试进行单词拆分和路径名扩展。

$ var=$'two\nlines   here'
$ echo $var
two lines here
$ echo "$var"
two
lines   here
$

因此:

echo "$var" | tr ' ' '\n'
# or using bash's more powerful types of parameter expansions
echo "${var// /$'\n'}"

var="$(echo "$var" | tr ' ' '\n')"

也可以看看:http://mywiki.wooledge.org/Quotes

答案2

摘自 Bash 手册 ( man bash):

命令替换允许用命令的输出替换命令名。有两种形式:

$(命令)

或者

`命令`

commandBash 通过执行命令替换并将其替换为命令的标准输出来执行扩展,删除所有尾随的换行符

这就是换行符丢失的原因。

相关内容