そこで、対話型スクリプトを使用してファイルの範囲を選択しようとしています。
最終目標はコマンドを使用することですが、ここではデモンストレーションのために変数を手動で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
エラーを表示し、一致するパターンがない場合にはゼロ以外の値で終了する場合は、シェル オプションを追加します。