![脚本内的扩展通配符 - 我做错了什么?](https://linux22.com/image/170610/%E8%84%9A%E6%9C%AC%E5%86%85%E7%9A%84%E6%89%A9%E5%B1%95%E9%80%9A%E9%85%8D%E7%AC%A6%20-%20%E6%88%91%E5%81%9A%E9%94%99%E4%BA%86%E4%BB%80%E4%B9%88%EF%BC%9F.png)
所以我尝试使用交互式脚本选择一系列文件。
最终目标是使用该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 选项。