如何使用Bash数组作为命令的输入?

spl*_*cer 6 arrays bash newline pipe

比方说,我有以下数组:

files=( "foo" "bar" "baz fizzle" )
Run Code Online (Sandbox Code Playgroud)

我想通过一个命令来管道这个数组的内容,比如说sort,好像每个元素都在一个文件中的一行.当然,我可以将数组写入临时文件,然后使用临时文件作为输入sort,但我想尽可能避免使用临时文件.

如果"bar fizzle"没有那个空格字符,我可以这样做:

echo ${files[@]} | tr ' ' '\012' | sort
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?谢谢!

Ign*_*ams 8

sort <(for f in "${files[@]}" ; do echo "$f" ; done)
Run Code Online (Sandbox Code Playgroud)


Gor*_*son 7

还有一个解决方案:

printf "%s\n" "${files[@]}" | sort
Run Code Online (Sandbox Code Playgroud)

  • @splicer:我认为 BUGS 部分中的注释正在讨论其他内容;主要描述部分说“格式字符串根据需要经常重用以满足参数。” [bash(1) 手册页](http://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man1/bash.1.html) 在其 printf 内置函数上有类似的注释。 (2认同)