Silakan pertimbangkan skrip sederhana ini bernama test :
#!/bin/bash
echo $1
dan perintah dan panggilan berikut:
$ echo "A B"
A B
$ echo ""A B""
A B
$ echo """A B"""
A B
$ echo """A B"""
A B
$ ./test "A B"
A B
$ ./test ""A B""
A
$ ./test """A B"""
A B
$ ./test """"A B""""
A
Bisakah seseorang tolong jelaskan mengapa panggilan tes tidak berperilaku seperti perintah gema atau arahkan ke dokumentasi yang relevan?
shell-script
quoting
Toliveira
sumber
sumber
printf '%q\n' "$@"
daripada tidakecho
sama sekali, yang akan memancarkan argumen Anda satu-ke-a-line dengan karakter tersembunyi dan spasi putih lolos dalam bentuk yang terlihat.Jawaban:
Karena
echo
menggabungkan semua argumen untuk mencetaknya, dan skrip Anda terbatas pada argumen pertama . Anda harus menggunakan"$@"
dan tidak$1
dalam skrip Anda.Mari kita lihat argumen yang Anda berikan untuk pengujian Anda:
./test "A B"
./test ""A B""
./test """A B"""
./test """"A B""""
Catatan: Anda akan melihat hasil yang berbeda dari
echo
jika Anda menggunakan lebih dari satu ruang dalam argumen Anda. Itu karena gema menyatukan argumennya dengan satu spasi:sumber