User/admin/1/2/[a-c]サブディレクトリにそれぞれ2つのファイルがあります。
ファイルはpreQC_1.txtとpreQC_2.txtで、どちらも私のツールの入力になります。
ForループのpreQC_1.txtに「$ {f ## * /}」を使用しています
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に展開されます'
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
構文を間違えました。正しい形式が"{$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
これは、HaukeLagingの答えにほぼ加わります。