Creo que esto hace lo que quieres. Pondrá todos los argumentos en una cadena, separados por espacios, con comillas simples alrededor de todos:
str="'$*'"
$*
produce todos los argumentos de los scripts separados por el primer carácter de los $IFS
cuales, por defecto, es un espacio.
Dentro de una cadena con comillas dobles, no hay necesidad de escapar de comillas simples.
Ejemplo
Pongamos lo anterior en un archivo de script:
$ cat script.sh
#!/bin/sh
str="'$*'"
echo "$str"
Ahora, ejecute el script con ejemplos de argumentos:
$ sh script.sh one two three four 5
'one two three four 5'
Este script es POSIX. Funcionará con bash
pero no requiere bash
.
Una variación: concatenando con barras en lugar de espacios
Podemos cambiar de espacios a otro personaje ajustando IFS
:
$ cat script.sh
#!/bin/sh
old="$IFS"
IFS='/'
str="'$*'"
echo "$str"
IFS=$old
Por ejemplo:
$ sh script.sh one two three four
'one/two/three/four'
cd "$*"
que será lo suficientemente bueno.cdm(){ str="$*"; cd "$str"; }
o, como sugiere Scott,cdm(){ cd "$*"; }
. Además, tenga en cuenta que$*
reemplaza múltiples espacios consecutivos con un solo espacio. Si el nombre de su directorio puede tener múltiples espacios consecutivos o pestañas o nuevas líneas, entonces esos caracteres realmente necesitan escapar antes de pasar a lacdm
función.cdm
como en:cdm 'test 2 trial 1'
. Esto manejará toda la mansión de nombres extraños. Sin embargo, siempre y cuando los espacios en blanco estén limitados a espacios individuales,cdm
entonces se puede ejecutar comocdm test 2 trial 1
.Es más fácil de lo que piensas:
chmod + x eso y ejecútalo:
fuente