スクリプト内の拡張されたワイルドカード - 私は何が間違っているのでしょうか?

スクリプト内の拡張されたワイルドカード - 私は何が間違っているのでしょうか?

そのため、インタラクティブスクリプトを使用してさまざまなファイルを選択しようとしています。

最後の目標はreadコマンドを使用することですが、ここではデモンストレーションのためにglob手動で変数を割り当てました。

#!/bin/bash
shopt -s extglob
# read -rp "Please enter a globbing string:"$'\n' glob

# This will give me an error (See below)
glob=*2020_04_03_{06..18}.jpg
/bin/ls -la /mnt/drive1/images/*/*/${glob}

# While this will return the desired files
/bin/ls -la /mnt/drive1/images/*/*/*2020_04_03_{06..18}.jpg

エラーは次のとおりです。

Error /bin/ls: cannot access "/mnt/drive1/images/*/*/*2020_04_03_{06..18}.jpg": No such file or directory

globもしそうなら、変数を割り当てるとき、またはglob私のパスに変数を追加するときに私が見逃しているのは何ですか?

解決策:

解決策を見つけましたが、理由はよくわかりません。

bash <<EOF
/bin/ls -la /mnt/drive1/images/*/*/${glob} 
EOF

私に欲しい結果を与えます。

ベストアンサー1

変数の代わりに配列割り当てを使用できます。

shopt -s nullglob  ##: just in case there is non match for the glob.

glob=(*2020_04_03_{06..18}.jpg) ##: This will expand the glob * and brace expansion.

/bin/ls -la /mnt/drive1/images/*/*/"${glob[@]}"
  • これはサンプルコードで機能します。

  • 問題は、中かっこ拡張の中の数字を拡張順序で参照されている@kusalananda変数で置き換えることを決定したときに発生します。

  • failglobエラーを確認し、パターンが一致しない場合にゼロ以外の値で終了するには、シェルオプションを追加してください。

おすすめ記事