ฉันเชื่อว่านี่เป็นสิ่งที่คุณต้องการ มันจะทำให้ข้อโต้แย้งทั้งหมดในหนึ่งสตริงคั่นด้วยช่องว่างด้วยคำพูดเดียวรอบทั้งหมด:
str="'$*'"
$*
สร้างอาร์กิวเมนต์ของสคริปต์ทั้งหมดที่คั่นด้วยอักขระตัวแรก$IFS
ซึ่งโดยค่าเริ่มต้นจะมีช่องว่าง
ภายในสตริงที่มีเครื่องหมายคำพูดคู่ไม่จำเป็นต้องหลีกเลี่ยงคำพูดเดียว
ตัวอย่าง
ให้เราใส่ข้างต้นในไฟล์สคริปต์:
$ cat script.sh
#!/bin/sh
str="'$*'"
echo "$str"
ตอนนี้รันสคริปต์ด้วยอาร์กิวเมนต์ตัวอย่าง:
$ sh script.sh one two three four 5
'one two three four 5'
สคริปต์นี้เป็น POSIX มันจะทำงานร่วมกับแต่มันไม่จำเป็นต้องbash
bash
รูปแบบ: การต่อข้อมูลกับเครื่องหมายทับแทนช่องว่าง
เราสามารถเปลี่ยนจากช่องว่างเป็นอักขระอื่นได้โดยการปรับIFS
:
$ cat script.sh
#!/bin/sh
old="$IFS"
IFS='/'
str="'$*'"
echo "$str"
IFS=$old
ตัวอย่างเช่น:
$ sh script.sh one two three four
'one/two/three/four'