gpt4 book ai didi

string - 将带引号的字符串参数传递给 bash 脚本

转载 作者:行者123 更新时间:2023-11-29 09:48:01 25 4
gpt4 key购买 nike

我无法在这里或其他任何地方找到这个看似简单的问题的解决方案。我想获取嵌套目录中所有文件的路径,在它们周围添加引号,并在 bash 脚本中循环遍历它们。目录名和文件中可以有空格。到目前为止,我尝试过的任何东西都无法正常工作。引用的路径字符串总是在空格处被打断。

test.sh

for var in "$@"
do
echo "$var"
done

我尝试从一个文件中读取每行一个路径,包括单引号和双引号:

find "nested directory with spaces" -type f | sed -e 's/^/"/g' -e 's/$/"/g' | tr '\n' '\n' > list.txt # double quotes
./test.sh `cat list.txt`

find "nested directory with spaces" -type f | sed -e 's/^/'\''/g' -e 's/$/'\''/g' | tr '\n' ' ' > list.txt # single quotes
./test.sh `cat list.txt`

和在引用路径、单引号和双引号之间使用空格的命令替换:

./test.sh `find "nested directory with spaces" -type f | sed -e 's/^/"/g' -e 's/$/"/g' | tr '\n' ' '` # double quotes

./test.sh `find "nested directory with spaces" -type f | sed -e 's/^/'\''/g' -e 's/$/'\''/g' | tr '\n' ' '` # single quotes

只需从命令行回显引用的路径即可获得所需的结果。可以将参数解析为完整字符串的脚本中缺少什么?

最佳答案

改为这样做:

find "nested directory with spaces" -type f -exec ./test.sh {} +

这将调用带有多个参数的 test.sh,而不分割文件名中的空格。

如果您的find 版本不支持+,那么您可以使用\; 代替,但这会调用 ./test.sh 每个参数一次。

例如,给定脚本:

#!/bin/sh
echo start
for i; do
echo file: "$i"
done

+\;的区别:

$ find a\ b.txt date.txt -exec ./test.sh {} +
start
file: a b.txt
file: date.txt
$ find a\ b.txt date.txt -exec ./test.sh {} \;
start
file: a b.txt
start
file: date.txt

关于string - 将带引号的字符串参数传递给 bash 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22307196/

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