如何解决双引号内的通配符?

如何解决双引号内的通配符?

在 bash 中,文件通配符 * 在双引号内不起作用,但我的文件名包含空格,因此我需要在将文件名传递给 shell 脚本之前使用双引号。我怎样才能做到这一点?

例如

myscript.sh "0$i*.pdf"

其中 pdf 文件可能是“01a b.pdf”、“02c d.pdf”。我用来i存储1然后2

谢谢。

答案1

只需取消对 glob 的引用即可。

myscript.sh "0$i"*".pdf"

看来您担心*会扩展到包含空格的字符串,b?这没问题,在路径名扩展(称为通配符)之后,空格将失去其语法值并变为文字。

查看执行示例:

$ ls -1
'01a b.pdf'
'01e f.pdf'
'02c d.pdf'
myscript.sh

$ cat myscript.sh
#!/bin/sh
for file in "$@"; do
    echo "$file"
done

$ i=1

$ ./myscript.sh "0$i"*".pdf"
01a b.pdf
01e f.pdf

相关内容