参数扩展问题

参数扩展问题

我在 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 的答案相一致。

相关内容