world script parameter hello example ejemplos check bash scripting

parameter - script bash linux ejemplos



Propagar todos los argumentos en un script bash shell (7)

Estoy escribiendo un script muy simple que llama a otro script, y necesito propagar los parámetros de mi script actual al script que estoy ejecutando.

Por ejemplo, el nombre de mi script es foo.sh y me llama bar.sh

foo.sh:

bar $1 $2 $3 $4

¿Cómo puedo hacer esto sin especificar explícitamente cada parámetro?


Para bash y otras conchas tipo Bourne:

java com.myserver.Program "$@"


Use "$@" lugar de simple $@ si realmente desea que sus parámetros pasen de la misma manera.

Observar:

$ cat foo.sh #!/bin/bash baz.sh $@ $ cat bar.sh #!/bin/bash baz.sh "$@" $ cat baz.sh #!/bin/bash echo Received: $1 echo Received: $2 echo Received: $3 echo Received: $4 $ ./foo.sh first second Received: first Received: second Received: Received: $ ./foo.sh "one quoted arg" Received: one Received: quoted Received: arg Received: $ ./bar.sh first second Received: first Received: second Received: Received: $ ./bar.sh "one quoted arg" Received: one quoted arg Received: Received: Received:


#!/usr/bin/env bash while [ "$1" != "" ]; do echo "Received: ${1}" && shift; done;

Solo pensé que esto podría ser un poco más útil cuando trates de probar cómo entran los args en tu script


Use "$@" (funciona para todos los compatibles con POSIX ).

[...], bash presenta la variable "$ @", que se expande a todos los parámetros de línea de comando separados por espacios.

De Bash por ejemplo .


Mi SUN Unix tiene muchas limitaciones, incluso "$ @" no se interpretó como se desea. Mi solución alternativa es $ {@}. Por ejemplo,

#!/bin/ksh find ./ -type f | xargs grep "${@}"

Por cierto, tenía que tener este script en particular porque mi Unix tampoco es compatible con grep -r


Funciona bien, excepto si tiene espacios o caracteres escapados. No encuentro la manera de capturar argumentos en este caso y enviarlos a ssh dentro del script.

Esto podría ser útil, pero es tan feo

_command_opts=$( echo "$@" | awk -F/- ''BEGIN { OFS=" -" } { for (i=2;i<=NF;i++) { gsub(/^[a-z] /,"&@",$i) ; gsub(/ $/,"",$i );gsub (/$/,"@",$i) }; print $0 }'' | tr ''@'' /' )


Me doy cuenta de que esto ha sido bien respondido, pero aquí hay una comparación entre "$ @" $ @ "$ *" y $ *

Contenido del script de prueba:

# cat ./test.sh #!/usr/bin/env bash echo "=================================" echo "Quoted DOLLAR-AT" for ARG in "$@"; do echo $ARG done echo "=================================" echo "NOT Quoted DOLLAR-AT" for ARG in $@; do echo $ARG done echo "=================================" echo "Quoted DOLLAR-STAR" for ARG in "$*"; do echo $ARG done echo "=================================" echo "NOT Quoted DOLLAR-STAR" for ARG in $*; do echo $ARG done echo "================================="

Ahora, ejecute el script de prueba con varios argumentos:

# ./test.sh "arg with space one" "arg2" arg3 ================================= Quoted DOLLAR-AT arg with space one arg2 arg3 ================================= NOT Quoted DOLLAR-AT arg with space one arg2 arg3 ================================= Quoted DOLLAR-STAR arg with space one arg2 arg3 ================================= NOT Quoted DOLLAR-STAR arg with space one arg2 arg3 =================================