Je crois que cela fait ce que vous voulez. Il mettra tous les arguments dans une chaîne, séparés par des espaces, avec des guillemets simples tout autour:
str="'$*'"
$*
produit tous les arguments de scripts séparés par le premier caractère $IFS
, lequel est par défaut un espace.
Dans une chaîne à double guillemets, il n'est pas nécessaire d'échapper aux guillemets simples.
Exemple
Mettons ce qui précède dans un fichier script:
$ cat script.sh
#!/bin/sh
str="'$*'"
echo "$str"
Maintenant, lancez le script avec des exemples d’arguments:
$ sh script.sh one two three four 5
'one two three four 5'
Ce script est POSIX. Cela fonctionnera avec bash
mais cela n’exige pas bash
.
Une variante: concaténer avec des barres obliques au lieu d'espaces
Nous pouvons passer d'espaces à un autre personnage en ajustant IFS
:
$ cat script.sh
#!/bin/sh
old="$IFS"
IFS='/'
str="'$*'"
echo "$str"
IFS=$old
Par exemple:
$ sh script.sh one two three four
'one/two/three/four'
cd "$*"
cela suffira.cdm(){ str="$*"; cd "$str"; }
ou, comme le suggère Scottcdm(){ cd "$*"; }
. Sachez également que$*
remplace plusieurs espaces consécutifs par un seul espace. Si le nom de votre répertoire peut comporter plusieurs espaces, tabulations ou nouvelles lignes consécutives, vous devez alors échapper ces caractères avant de les transmettre à lacdm
fonction.cdm
comme dans:cdm 'test 2 trial 1'
. Cela gérera tous les manoirs de noms étranges. Cependant, tant que les espaces blancs sont limités à des espaces simples,cdm
alors il peut être exécuté en tant quecdm test 2 trial 1
.C'est plus facile que vous ne le pensez:
chmod + x that, et lancez-le:
la source