そのため、インタラクティブスクリプトを使用してさまざまなファイルを選択しようとしています。
最後の目標は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
エラーを確認し、パターンが一致しない場合にゼロ以外の値で終了するには、シェルオプションを追加してください。