所以我嘗試使用互動式腳本選擇一系列文件。
最終目標是使用該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
如果您希望看到錯誤並在沒有匹配模式時以非零值退出,請新增shell 選項。