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 $IFScuales, 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 bashpero 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 lacdmfunción.cdmcomo 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,cdmentonces se puede ejecutar comocdm test 2 trial 1.Es más fácil de lo que piensas:
chmod + x eso y ejecútalo:
fuente