我在 user/admin/1/2/[ac] 子目录中各有 2 个文件。
这些文件是 preQC_1.txt 和 preQC_2.txt - 这两个文件都将作为我的工具的输入。
我在 for 循环中使用“${f##*/}”作为 preQC_1.txt
for f in ~/1/2/*/*_1.txt; do exptool input1= "${f##*/}" input2= "{$f%_1.txt}_2.txt"
我的程序显示文件“{$f%_1.txt}_2.txt”,我 100% 确定我错误地使用了参数扩展。对于 input2,如何确保我只获取“preQC_2.txt”(文件名+扩展名,没有目录列表)?
编辑:我尝试组合“${f##*/}”和{$f%_1.txt}_2.txt”,但实际上扩展为“user/admin/1/2/a/preQC_1.txt_2.txt” '
答案1
for f in ~/1/2/*/*_1.txt; do
file_without_path="${f##*/}"
exptool input1= "${file_without_path}" input2= "${file_without_pathf%_1.txt}_2.txt"
done
答案2
你只是犯了一个语法错误:你写的"{$f%_1.txt}_2.txt"
时候正确的形式是"${f%_1.txt}_2.txt"
(你放错了$
字符)。
:)
编辑:哎呀,我弄错了,因为在块中"${f%_1.txt}_2.txt"
,f
的值仍然是user/admin/1/2/a/preQC_1.txt
所以基本上"${f%_1.txt}_2.txt"
的值是user/admin/1/2/a/preQC_2.txt
,这不是你想要的。
我建议f
首先更新 的值,例如
for f in ~/1/2/*/*_1.txt
f=${f##*/}
do exptool input1= "$f" input2= "${f%_1.txt}_2.txt"
done
这几乎与 Hauke Laging 的答案相一致。