在 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')"
答案2
摘自 Bash 手册 ( man bash
):
命令替换允许用命令的输出替换命令名。有两种形式:
$(命令)
或者
`命令`
command
Bash 通过执行命令替换并将其替换为命令的标准输出来执行扩展,删除所有尾随的换行符。
这就是换行符丢失的原因。