gpt4 book ai didi

java - 如果有任何文件名带有空格,如何正确地将 git ls-files 输出传递到 Java?

转载 作者:太空宇宙 更新时间:2023-11-04 09:19:56 24 4
gpt4 key购买 nike

我正在尝试在 Java 程序中处理 git ls-files 的输出。使用方法很简单:

java Test $(git ls-files)

测试.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

请注意,第一个输入 $.csv 中间有一个空格。

我想要的输出当然是:

input $.csv
input_1.csv
input_2.csv
input_3.csv

但是,Test 打印出的是:

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'

但是,使用和不使用 sed 时,测试仍然打印出相同的输出。我的脚本可能有什么问题?

最佳答案

要在 git ls-files 的输出中保留特殊字符,请使用 -z 标志。

要将 git ls-files -z 的空分隔输出作为命令行参数列表传递,请首先使用内置的 mapfile 将输出存储在临时 Bash 数组中(至少需要 Bash 4)。然后你可以在命令行上传递数组,正确保留特殊字符。

mapfile -d '' files < <(git ls-files -z)
java Test "${files[@]}"

关于java - 如果有任何文件名带有空格,如何正确地将 git ls-files 输出传递到 Java?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58459795/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com