所以我尝试使用交互式脚本选择一系列文件。
最终目标是使用该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 选项。