如何获取 shell 中 {} 的值?
How to get value of {} in shell?
find . -name "*.network" -o -name "*.index" | xargs -n 1 -I {} -P 5 sh -c "ncols=3; filename={}; echo $filename"
我想获取存储在变量中的文件名。通过设置 filename={} 和 echo filename,我在控制台中没有任何输出。
因为我想用多线程。 xargs 在我的脚本中是必需的。
我按照 aicastell 的建议使用单引号。但我想在引号内使用 awk。我应该如何处理引号内的单引号? \s 无效。
谁能帮我解决这个问题?
你可以这样做:
for FILENAME in $(find . -name "*.network" -o -name "*.index")
do
# process $FILENAME
done
因为 $filename
在双引号内,所以 shell 在它运行你的管道之前就把它替换掉了。换句话说:echo
语句中的 filename 指的是调用 shell 中的变量,而不是您打开的 subshell 中的变量sh -c
.
因此,请改用单引号!
find . -name "*.network" -o -name "*.index" | xargs -n 1 -I {} -P 5 sh -c "ncols=3; filename={}; echo $filename"
我想获取存储在变量中的文件名。通过设置 filename={} 和 echo filename,我在控制台中没有任何输出。
因为我想用多线程。 xargs 在我的脚本中是必需的。
我按照 aicastell 的建议使用单引号。但我想在引号内使用 awk。我应该如何处理引号内的单引号? \s 无效。
谁能帮我解决这个问题?
你可以这样做:
for FILENAME in $(find . -name "*.network" -o -name "*.index")
do
# process $FILENAME
done
因为 $filename
在双引号内,所以 shell 在它运行你的管道之前就把它替换掉了。换句话说:echo
语句中的 filename 指的是调用 shell 中的变量,而不是您打开的 subshell 中的变量sh -c
.
因此,请改用单引号!