我正在尝试处理git ls-files
Java程序中的输出。用法很简单:
java Test $(git ls-files)
Test.java:
public class Test {
public static void main(String[] args) {
for (String s : args) {
System.out.println(s);
}
}
}
现在只是打印出所有参数。
输出git ls-files
:
input $.csv
input_1.csv
input_2.csv
input_3.csv
请注意,第一个input $.csv
中间有一个空格。
我想要的输出当然是:
input $.csv
input_1.csv
input_2.csv
input_3.csv
但是,测试打印出的内容是:
input
$.csv
input_1.csv
input_2.csv
input_3.csv
这个空间实际上违反了我的期望。
因此,我尝试sed
将所有文件名都用引号引起来:
java Test $(git ls-files | sed "s/\(.*\)/'\1'/g")
的输出$(git ls-files | sed "s/\(.*\)/'\1'/g")
符合预期:
'input $.csv'
'input_1.csv'
'input_2.csv'
'input_3.csv'
但是,无论使用和不使用,Test仍会打印出相同的输出sed
。我的脚本怎么了?
要在的输出中保留特殊字符git ls-files
,请使用-z
标志。
要git ls-files -z
将以null分隔的输出作为命令行参数列表传递,请使用mapfile
内置功能(至少需要Bash 4)将输出首先存储在临时Bash数组中。然后,您可以在命令行上传递数组,正确保留特殊字符。
mapfile -d '' files < <(git ls-files -z)
java Test "${files[@]}"
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句