Saya percaya ini melakukan apa yang Anda inginkan. Ini akan menempatkan semua argumen dalam satu string, dipisahkan oleh spasi, dengan tanda kutip tunggal di semua:
str="'$*'"
$*
menghasilkan semua argumen skrip yang dipisahkan oleh karakter pertama $IFS
yang, secara default, adalah spasi.
Di dalam string yang dikutip ganda, tidak perlu keluar dari tanda kutip tunggal.
Contoh
Mari kita letakkan di atas dalam file skrip:
$ cat script.sh
#!/bin/sh
str="'$*'"
echo "$str"
Sekarang, jalankan skrip dengan argumen contoh:
$ sh script.sh one two three four 5
'one two three four 5'
Script ini POSIX. Ini akan bekerja dengan bash
tetapi tidak perlu bash
.
Variasi: disatukan dengan garis miring bukan spasi
Kami dapat mengubah dari spasi ke karakter lain dengan menyesuaikan IFS
:
$ cat script.sh
#!/bin/sh
old="$IFS"
IFS='/'
str="'$*'"
echo "$str"
IFS=$old
Sebagai contoh:
$ sh script.sh one two three four
'one/two/three/four'
cd "$*"
akan cukup baik.cdm(){ str="$*"; cd "$str"; }
atau, seperti yang disarankan Scottcdm(){ cd "$*"; }
,. Perlu diketahui juga bahwa$*
mengganti beberapa ruang berurutan dengan satu ruang. Jika nama direktori Anda mungkin memiliki beberapa spasi atau tab atau baris baru berurutan, maka karakter-karakter itu benar-benar perlu diloloskan sebelum mereka dilewatkan kecdm
fungsi.cdm
seperti di:cdm 'test 2 trial 1'
. Ini akan menangani semua manor nama aneh. Namun, selama ruang putih terbatas pada ruang tunggal, maka ruangcdm
tersebut dapat dijalankan sebagaicdm test 2 trial 1
.Lebih mudah dari yang Anda pikirkan:
chmod + x itu, dan jalankan:
sumber