Tôi tin rằng điều này làm những gì bạn muốn. Nó sẽ đặt tất cả các đối số trong một chuỗi, được phân tách bằng dấu cách, với các dấu ngoặc đơn xung quanh tất cả:
str="'$*'"
$*
tạo ra tất cả các đối số tập lệnh được phân tách bằng ký tự đầu tiên $IFS
, theo mặc định, là một khoảng trắng.
Trong một chuỗi trích dẫn kép, không cần phải thoát dấu ngoặc đơn.
Thí dụ
Hãy để chúng tôi đặt ở trên trong một tập tin kịch bản:
$ cat script.sh
#!/bin/sh
str="'$*'"
echo "$str"
Bây giờ, hãy chạy tập lệnh với các đối số mẫu:
$ sh script.sh one two three four 5
'one two three four 5'
Kịch bản này là POSIX. Nó sẽ làm việc với bash
nhưng nó không yêu cầu bash
.
Một biến thể: nối với dấu gạch chéo thay vì dấu cách
Chúng ta có thể thay đổi từ không gian sang nhân vật khác bằng cách điều chỉnh IFS
:
$ cat script.sh
#!/bin/sh
old="$IFS"
IFS='/'
str="'$*'"
echo "$str"
IFS=$old
Ví dụ:
$ sh script.sh one two three four
'one/two/three/four'