如何将ls -1扩展为Mac OSX终端中的变量

时间:2015-02-16 22:39:49

标签: macos bash unix ls variable-expansion

在Mac OS X终端中使用bash shell,我想在变量中放入当前目录中的所有文件名,每行一个名称(基本上是ls -1的输出)。 但是,如果我这样做:

var=$(ls -1)
echo $var

变量' var' contains包含所有文件名,但在一行中,用空格分隔。 我怎样才能解决这个问题并得到我想要的东西。 更一般地说,这种行为的原因是什么? ls -1扩张期间发生了什么?

我意识到我可以通过执行以下操作将我想要的内容放在文件中,但我宁愿用变量获得相同的结果。

ls -1 > var

提前致谢。

1 个答案:

答案 0 :(得分:3)

你的命令var=$(ls -1)运行正常。试试echo "$var"(带双引号)。

echo $var中,bash正在阅读$var并将每个单词作为参数传递给echo。它以相同的方式处理空格和换行符。使用双引号会导致bash将$var视为单个参数,而不是重新格式化。

正如mklement0所提到的,此处发生的$var扩展称为单词拆分。搜索" Word Splitting"在man bash中获取更多信息。 IFS变量(也在man bash中)控制bash用于执行分词的字符。