set -x
for f in ~/1/2/*/*_1.txt; do
subdir="${f%/*}"
pushd "$subdir" &>/dev/null
file="${f##*/}"
expTool INPUT1= "${f##*/}" INPUT2= "${f%_1.txt}_2.txt OUTPUT1= "${f%_1.txt}_3.txt" OUTPUT2= "${f%_2.txt}_4.txt"
done
expTool error: [Errno 2] No such file or directory: '*_1.txt'
引用を引いたが動作しません。
編集:set -xを使う
+for f in '/User/admin/1/2/*/*_1.txt'
+subdir='/User/admin/1/2/*'
+pushd '/User/admin/1/2/*'
+file='*_1.txt'
+expTool INPUT= '*_1.txt' OUTPUT= '${f%_1.txt}_2.txt'
これにより、 "*"構文がワイルドカード(?)として登録されていないように見えます。私はMac OSX 10.8.6を使用しています。
ベストアンサー1
ワイルドカード拡張を無効にするスクリプトの前半を実行しているか、一致するset -f
ファイルがありません。一致するファイルが存在しない場合、パターンは変更されずに保持されるため、forループはパターンが変更されていない要素で機能します。 Bashでは、shopt -s nullglob
空のリストに展開するのではなく、を使用して一致しないパターンを作成できます。