Ich glaube, das macht was du willst. Alle Argumente werden in eine durch Leerzeichen getrennte Zeichenfolge mit einfachen Anführungszeichen gesetzt:
str="'$*'"
$*
Erzeugt alle Skriptargumente, die durch das erste Zeichen getrennt sind $IFS
, wobei es sich standardmäßig um ein Leerzeichen handelt.
In einer Zeichenfolge mit doppelten Anführungszeichen müssen einfache Anführungszeichen nicht ausgeblendet werden.
Beispiel
Lassen Sie uns das Obige in eine Skriptdatei schreiben:
$ cat script.sh
#!/bin/sh
str="'$*'"
echo "$str"
Führen Sie nun das Skript mit Beispielargumenten aus:
$ sh script.sh one two three four 5
'one two three four 5'
Dieses Skript ist POSIX. Es wird funktionieren, bash
aber es erfordert nicht bash
.
Eine Variante: Verketten mit Schrägstrichen statt Leerzeichen
Wir können von Leerzeichen zu einem anderen Zeichen wechseln, indem wir Folgendes anpassen IFS
:
$ cat script.sh
#!/bin/sh
old="$IFS"
IFS='/'
str="'$*'"
echo "$str"
IFS=$old
Beispielsweise:
$ sh script.sh one two three four
'one/two/three/four'
cd "$*"
wird es gut genug sein.cdm(){ str="$*"; cd "$str"; }
oder, wie Scott sagt,cdm(){ cd "$*"; }
. Beachten Sie auch, dass$*
mehrere aufeinanderfolgende Leerzeichen durch ein einzelnes Leerzeichen ersetzt werden. Wenn Ihr Verzeichnisname möglicherweise mehrere aufeinanderfolgende Leerzeichen oder Tabulatoren oder Zeilenumbrüche enthält, müssen diese Zeichen wirklich maskiert werden, bevor sie an diecdm
Funktion übergeben werden.cdm
wie in:cdm 'test 2 trial 1'
. Dies wird alle Herrenhäuser mit seltsamen Namen behandeln. Solange die Leerzeichen jedoch auf einzelne Leerzeichen beschränkt sind, kann dascdm
dann so ausgeführt werdencdm test 2 trial 1
.Es ist einfacher als Sie denken:
chmod + x that und starte es:
quelle