假设我有一个目录,其中包含三个文件,其名称包括空格:a b
、c d
和e f
. 我想用来vi
编辑前两个文件。我想要的 bash 命令是
vi "a b" "c d"
我还想使用 获取前两行ls
命令head
,这样我就可以替换第一个命令的参数:
ls | head -n 2
但是,如果我运行vi $(ls | head -n 2)
,它相当于vi a b c d
,这不是我想要的,因为里面的输出$()
是由空格和换行符分割的。有没有办法只用换行符分割输出?
是的,
IFS
只设置一个换行符(默认情况下它包含一个空格、一个制表符和一个换行符):(
$''
是非标准的,但可以在 Bash/ksh/zsh 中使用,并且比替代品更漂亮。)也就是说,您仍然遇到文件名可能包含全局字符的问题。要禁用通配符,您需要先使用
set -f
(然后set +f
重新启用它)。而且,如果您的文件名包含换行符,那将不起作用,但我想您知道这一点。