腳本內的擴充通配符 - 我做錯了什麼?

腳本內的擴充通配符 - 我做錯了什麼?

所以我嘗試使用互動式腳本選擇一系列文件。

最終目標是使用該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 選項。

相關內容