そのため、インタラクティブなスクリプトを使用してファイルの範囲を選択しようとしています。
最終目標は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
希望する出力が得られます。
変数だけでなく、配列割り当てを使用できます。
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
Shellオプションを追加し、一致するパターンがない場合はゼロ以外で終了します。