如何将文件名列表传递给命令

时间:2018-06-14 10:46:02

标签: bash

hindent --style johan-tibell --line-length 80 --indent-size 4 --sort-imports -XQuasiQuotes接受文件名作为参数,但如何将文件列表作为

传递

我有变量fileNames,其中包含文件名列表,我想使用此命令处理每个文件,我们可以不进行任何循环吗?

修改

变量fileNames使用:

声明
fileNames=$((git diff --cached --name-only | grep -E '*.hs')) 

2 个答案:

答案 0 :(得分:3)

您可以使用command substitutionfor循环进行循环播放:

for file in $( git diff --cached --name-only | grep -E '*.hs' ); do
  hindent --style johan-tibell --line-length 80 --indent-size 4 --sort-imports -XQuasiQuotes ${file}
done

答案 1 :(得分:1)

最好的选择是fileNames是一个数组:

hindent --style johan-tibell \
  --line-length 80 --indent-size 4 \
  --sort-imports -XQuasiQuotes "${fileNames[@]}"

否则,当文件包含空格时,您将遇到问题,即。 IFS(内部字段分隔符)变量中的任何字符。

更新

如果这只是一次性命令,并且您不再需要文件列表,则可以在一行中使用xargs

git diff --cached --name-only \
  | grep -E '*.hs$' \
  | xargs -r hindent --style johan-tibell \
      --line-length 80 --indent-size 4 \
      --sort-imports -XQuasiQuotes