forループは*構文を区別できません。

forループは*構文を区別できません。
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空のリストに展開するのではなく、を使用して一致しないパターンを作成できます。

おすすめ記事