脚本内的扩展通配符 - 我做错了什么?

脚本内的扩展通配符 - 我做错了什么?

所以我尝试使用交互式脚本选择一系列文件。

最终目标是使用该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 选项。

相关内容