Estoy tratando de obtener los parámetros citados de un script bash para que un script anidado los reciba de forma segura. ¿Algunas ideas?
test.sh
#!/bin/bash
echo $*
bash myecho.sh $*
myecho.sh
#!/bin/bash
echo $1
echo $2
echo $3
echo $4
Muestra:
bash test.sh aaa bbb '"ccc ddd"'
Resultado:
aaa bbb "ccc ddd"
aaa
bbb
"ccc
ddd"
Resultado deseado
aaa bbb "ccc ddd"
aaa
bbb
ccc ddd
Respuestas:
Tenga en cuenta que la construcción "$ @" no es específica de bash y debería funcionar con cualquier shell POSIX (al menos lo hace con dash). Tenga en cuenta también que, dado el resultado que desea, no necesita el nivel adicional de cotización en absoluto. IE simplemente llame al script anterior como:
fuente
$@
no está disponible dentro de una función (porque se sobrescribe con los argumentos de la función). Intentéfoovar="$@"
yfoovar=$@
+"$foovar"
en la función y ninguno funcionó: - /Desea utilizar "$ @" (dólar cotizado en) para pasar parámetros a un subíndice. Al igual que ....
ls-color.sh:
Como qué.....
Desde la página del manual de Bash :
Configurando algunos scripts de demostración ...
"$@"
- quoted-dollar-at es una transformación de identidad para volver a pasar argumentos a una subcapa (~ 99% del tiempo, esto es lo que pretendía hacer):"$*"
- quoted-dollar-star rompe los argumentos en una sola cadena (~ 1% del tiempo que realmente desea este comportamiento, por ejemplo, en un condicional :)if [[ -z "$*" ]]; then ...
:$*
/$@
- sin comillas, ambas formas eliminan un nivel de comillas e interpretan los espacios de las cadenas subyacentes, pero ignoran los caracteres de comillas (casi siempre, esto es un error):Si quieres divertirte un poco, puedes usar "$ @" para anidar cosas tan profundo como quieras, empujando y sacando elementos de la pila de argumentos si quieres.
fuente