将 file-per-line 转换为 bash 参数

Turn file-per-line into bash parameters

我有一些命令 foo 可以生成文件列表(每行一个)。

我想在命令替换中安全地使用它;例如git checkout ... -- $(foo)。由于文件名可以有特殊字符和空格,我想避免任何分词或其他问题。

解决这个问题的好方法是什么?请记住,我预计需要做很多这件事,所以最好有一个不是 janky 的解决方案(随心所欲地解释。)

foo | xargs -I % git checkout ... "%"

zsh

的解决方案

您可以将它们存储到数组中

files=( ${(f)"$(foo)"} )

并将其用作

git checkout ... -- $files

(f) 在换行符处拆分命令的输出。

IFS can be set 制作数组时要尊重空格:

IFS=$'\r\n' eval 'FILES=($(foo))'

最后,可以根据需要在脚本中使用它:

git checkout ... -- "${FILES[@]}"