在Mac OS X终端中使用bash shell,我想在变量中放入当前目录中的所有文件名,每行一个名称(基本上是ls -1的输出)。 但是,如果我这样做:
var=$(ls -1)
echo $var
变量' var' contains包含所有文件名,但在一行中,用空格分隔。 我怎样才能解决这个问题并得到我想要的东西。 更一般地说,这种行为的原因是什么? ls -1扩张期间发生了什么?
我意识到我可以通过执行以下操作将我想要的内容放在文件中,但我宁愿用变量获得相同的结果。
ls -1 > var
提前致谢。
答案 0 :(得分:3)
你的命令var=$(ls -1)
运行正常。试试echo "$var"
(带双引号)。
在echo $var
中,bash正在阅读$var
并将每个单词作为参数传递给echo
。它以相同的方式处理空格和换行符。使用双引号会导致bash将$var
视为单个参数,而不是重新格式化。
正如mklement0所提到的,此处发生的$var
扩展称为单词拆分。搜索" Word Splitting"在man bash
中获取更多信息。 IFS
变量(也在man bash
中)控制bash用于执行分词的字符。