无法使用Bash变量扩展替换空格

时间:2014-01-02 18:48:51

标签: bash variables replace

为什么tr命令在ls输出中用破折号成功替换空格:

a=$(ls) ; b=$(echo $a | tr ' ' -) ; echo $b

虽然我不能通过变量扩展来做同样的事情:

a=$(ls) ; b=${a// /-} ; echo $b

1 个答案:

答案 0 :(得分:3)

问题是echo $a将所有连续的空格序列(包括换行符)压缩到一个空格中。这是word splitting,如手册中所述。如果引用变量,事情会有所不同:

a=$(ls) ; b=$(echo "$a" | tr ' ' -) ; echo $b; echo "$b"

除非您特别想要分词,否则请引用您的变量。

变量赋值受分词限制,因此此部分b=${a// /-}仅用连字符替换文件名中的空格,而不是ls输出中的换行符

请注意,ls旨在供人眼阅读。不要解析lshttp://mywiki.wooledge.org/ParsingLs

的输出