web-dev-qa-db-ja.com

パラメータ拡張の質問

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に展開されます'

2
ozarka
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
Hauke Laging

構文を間違えました。正しい形式が"{$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の答えにほぼ加わります。

1
joH1