gpt4 book ai didi

string - 如何将字符串列表格式化为 Bash 函数中的一组命令选项/参数对

转载 作者:可可西里 更新时间:2023-11-01 11:44:53 26 4
gpt4 key购买 nike

我想做什么

我在 Windows 上运行 Git Bash,我正在尝试为 ls 编写一个包装函数正确处理 Windows 的隐藏文件标志。

命令cmd.exe /c "dir /b /a/h"将在具有隐藏标志的目录中输出文件列表。每个文件名在一行上输出,由 \r\n 分隔(作为Windows)。带空格的文件名用单引号括起来。

$ cmd.exe /c "/b /ah"
.gitconfig
desktop.ini
'hidden file.txt'

然后我想将其格式化为 --ignore 的列表最终选项 ls打电话。

--ignore='.gitconfig' --ignore='desktop.ini' --ignore='hidden file.txt'

我尝试过的

我正在使用 for循环,设置 IFS='\r\n' 后,这应该允许我用 --ignore=' 格式化每个文件名字符串和 ' .

function ls {
options=""
IFS="\r\n"
for filename in $(cmd.exe /c "dir /b /ah")
do options="${options}--ignore='$filename' "
done

echo $options
# command ls $options "$@"
}

但是,字符串没有被拆分,n 的所有实例和 r在输出中被替换为空格,因此生成的字符串是乱码。

$ ls
--ig o e='.gitco fig
desktop.i i
hidde file.txt'

我做错了什么?

最佳答案

将选项收集到单个字符串变量中的结果会很糟糕。请改用数组。

ls () {
options=()
local IFS="\r\n"
while read -r filename; do
case $filename in \'*\')
filename=${filename#\'}; filename=${filename%\'};;
esac
options+=("--ignore=$filename")
done < <(cmd.exe /c "dir /b /ah")

# echo will flatten the arguments, maybe just run git here
echo "${options[@]}"
}

另见 http://mywiki.wooledge.org/BashFAQ/050进行更深入的讨论。

关于string - 如何将字符串列表格式化为 Bash 函数中的一组命令选项/参数对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47903762/

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