Bash

如何解決雙引號內的萬用字元?

  • November 28, 2020

在 bash 中,文件 globbing * 在雙引號內不起作用,但我的文件名包含空格,所以我需要在將文件名傳遞給 shell 腳本之前用雙引號引起來。我怎樣才能做到這一點?

例如

myscript.sh "0$i*.pdf"

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

謝謝。

簡單地取消引用 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

引用自:https://unix.stackexchange.com/questions/621881