Wildcard di dalam tanda kutip

32

Ini akan menjadi hal yang mudah, tetapi dalam ingatan saya, ketika shell scripting, menggunakan tanda kutip ganda akan memungkinkan perluasan globbing dan variabel.

Tetapi dalam kode berikut:

#!/bin/sh

echo *.sh
echo "*.sh"
echo '*.sh'

echo $LANG
echo "$LANG"
echo '$LANG'

Saya mendapatkan hasil ini:

bob.sh redeployJboss.sh
*.sh
*.sh
en_US.utf8
en_US.utf8
$LANG

Jadi kutip tunggal mencegah glob dan ekspansi variabel tetapi kutip ganda hanya memungkinkan ekspansi variabel dan tidak ada globbing?

Bisakah saya menggumpal dalam pola kutipan apa pun?

Tisek
sumber

Jawaban:

26

Anda benar: globbing tidak bekerja dalam tanda kutip tunggal atau ganda. Namun, Anda dapat menginterpolasi globbing dengan string yang dikutip ganda:

$ echo "hello world" * .sh "selamat tinggal dunia"
halo dunia [daftar file] selamat tinggal dunia
Flup
sumber
6
Atau bahkan echo "$hello and $goodbye".*(mencampur ekspansi variabel, spasi, dan gumpalan dalam "kata" yang sama.
vonbrand
1
Globbing tampaknya tidak berfungsi dalam kasus ini echo /path/to/file/*${variable},. Bagaimana saya glob ketika menambahkan email interpolasi?
CMCDragonkai
2
@ CMCDragonkai echo "$FOLDER_PATH"/*.extensionberfungsi dengan baik untuk saya, bertentangan dengan jawaban yang diterima, saya harus menghapus spasi antara "dan *. Semoga ini bisa membantu.
LostBalloon
@CMCDragonkai, @LostBalloon Saya menggunakan pola berikut ketika saya ingin menggunakan gumpalan dengan variabel yang mungkin memiliki spasi:(cd "$FOLDER_PATH" && echo *.extension)
Steven Darnell