二重引用符内のワイルドカード文字をどのように解決しますか? [コピー]

二重引用符内のワイルドカード文字をどのように解決しますか? [コピー]

Bashでは、ファイルワイルドカード*は二重引用符内では機能しませんが、ファイル名にスペースが含まれているため、ファイル名をシェルスクリプトに渡す前に二重引用符を使用する必要があります。どうすればいいですか?

例えば

myscript.sh "0$i*.pdf"

PDFファイルは、「01a b.pdf」または「02c d.pdf」のいずれかです。私はiそれを保存するために使用します。12

ありがとうございます。

答え1

ただ地球を逆参照してください。

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

関連情報