将 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[@]}"
我有一些命令 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[@]}"