$ es utilizado para expansión de parámetros y sustitución de comandos
| variable | Significado |
|---|---|
| $0 | Nombre del script que se está ejecutando |
| $1 | Parámetro 1 |
| $2 - $9 | Parámetros del 2 al 9 |
| ${10} | Parámetro 10 |
| $# | Número de parámetros |
| «$*» | Todos los parámetros en 1 cadena, ha de llevar « |
| «$@» | Todos los parámetros |
| ${#*} | Número de parámetros pasados (¿como $#?) |
| ${#@} | Número de parámetros pasados (¿como $#?) |
| $? | Valor de retorno |
| $$ | ID de proceso del script (PID) |
| $- | Flags pasados al script |
| $_ | Último argumento del comando anterior |
| $! | PID del último trabajo ejecutado en background |
Mirar también: http://wiki.bash-hackers.org/scripting/posparams
| expresión | Significado |
|---|---|
| ${variable} | valor de variable, lo mismo que $variable |
| ${parametro-valorPorDefecto} | si el parámetro no está establecido, se le asigna el de por defecto |
| ${parametro:-valorPorDefecto} | si el parámetro no está establecido o es vacío, se le asigna el de por defecto (sobre variables solo?) |
| ${parametro=valorPorDefecto} | si el parámetro no está establecido, se le asigna el de por defecto (no funciona sobre parametros posicionales -$1,$2…-) |
| ${parametro:=valorPorDefecto} | si el parámetro no está establecido o es vacío, se le asigna el de por defecto (no funciona sobre parametros posicionales -$1,$2…-) |
| ${variable?MensajeError} | comprueba si variable no está establecida, mostrando el mensaje de error y para la ejecución del script |
| ${variable:?MensajeError} | comprueba si variable no está establecida o si es vacía, mostrando el mensaje de error y para la ejecución del script |
| ${variable+OTHER} | si el parámetro está establecido, se le asigna OTHER, en otro caso, NULL |
| ${variable:+OTHER} | si el parámetro está establecido, se le asigna OTHER, en otro caso, NULL |
| ${!prefijoVariable*} | devuelve todas las variables declaradas que empiecen por prefijoVariable |
| ${!prefijoVariable@} | devuelve todas las variables declaradas que empiecen por prefijoVariable |
para manipular, mirar shell expansion pattern matching : https://www.cyberciti.biz/tips/bash-shell-parameter-substitution-2.html
/via: http://wiki.bash-hackers.org/syntax/pe?do=
/mas: https://tldp.org/LDP/abs/html/string-manipulation.html
Looking for a specific syntax you saw, without knowing the name?
$PARAMETER${PARAMETER}${!PARAMETER}${PARAMETER^}${PARAMETER^^}${PARAMETER,}${PARAMETER,,}${PARAMETER~}${PARAMETER~~}${!PREFIX*}${!PREFIX@}${PARAMETER#PATTERN}${PARAMETER##PATTERN}${PARAMETER%PATTERN}${PARAMETER%%PATTERN}${PARAMETER/PATTERN/STRING}${PARAMETER//PATTERN/STRING}${PARAMETER/PATTERN}${PARAMETER//PATTERN}${#PARAMETER}${PARAMETER:OFFSET}${PARAMETER:OFFSET:LENGTH}${PARAMETER:-WORD}${PARAMETER-WORD}${PARAMETER:=WORD}${PARAMETER=WORD}${PARAMETER:+WORD}${PARAMETER+WORD}${PARAMETER:?WORD}${PARAMETER?WORD}+info: Referencias indirectas
| expresión | Significado | Ejemplo |
|---|---|---|
${#parametro} | longitud de parámetro | echo ${#string} |
${cadena:posición} | extrae subcadena desde posición | echo ${string:4} |
${cadena:posición:longitud} | extrae subcadena desde posición la longitud solicitada | echo ${string:4:7} ; echo ${string::-1} |
${cadena#subcadena} | eliminar subcadena del principio de la cadena | echo ${string#substring} |
${cadena%subcadena} | eliminar subcadena del final de la cadena permite uso * | echo ${string%substring} echo ${string%substring*} |
${cadena/s1/s2} | reemplazar primera aparicion s1 por s2 | |
${cadena//s1/s2} | reemplazar todas aparicion s1 por s2 | |
${cadena/#s1/s2} | reemplazar si hay coincidencia al princpio de cadena | |
${cadena/%s1/s2} | reemplazar si hay coincidencia al final de cadena | |
| recorrido | ||
${cadena##*separador} | extrae el último elemento de la ristra, usando separador | data=foo,bar,baz;echo ${data##*,} |
| mayúsculas y minúsculas | ||
${cadena^^} | convierte a mayúsculas | |
${cadena^} | a mayúsculas el primer carácter | |
${cadena,,} | convierte a minúsculas | |
${cadena,} | a minúsculas el primer carácter | |
${¢adena^^[chars]} | cambia chars a mayúsculas | |
$ a=foo; b=bar; [ «$a» = «$b» ] && echo «iguales» || echo «diferentes» ← espacios en condición importantes$ a=foo; b=bar; [ «$a» == «$b» ] && echo «iguales» || echo «diferentes» ← idem anterior$ a=foo; b=bar; [ «$a» != «$b» ] && echo «diferentes» || echo «iguales»$ a=foto.jpg ; [[ "$a" != *.gif ]] && echo «no gif» || echo «gif» ← doble corchetes hacen pattern matching$ a=foo; b=bar; [ «$a» = «foo» -a «$b» = «bar» ] && echo «todo OK» || echo «algo falla» ← -a equivale AND$ a=foo; b=bar; [ «$a» = «foo» -o «$b» = «bar» ] && echo «al menos 1 OK» || echo «ninguno OK» ← -o equivale OR${@:7:2} → devuelve $7 y $8cadena="Esto es una cadena" arr=($cadena) for i in ${arr[@]}; do echo $i; done
cadena="Esto es una cadena" for i in ${cadena[@]}; do echo $i; done
$string =~ $substring
partiendo de esta cadena: foo=/tmp/mi.directorio/imagen.png
path = ${foo%/*} → »/tmp/mi.directorio«file = ${foo##*/} → «imagen.png»base = ${file%%.*} → «imagen»base=${file%.*}ext = ${file#*.} ← en este caso, devolvería: «directorio/imagen.png», cogiendo desde el primer punto que encuentaext=${file##*.}→ «png»ps -L u n | tr -s » « | cut -d » « -f 2,3,14-| comando | descripción |
|---|---|
${var} | variable |
${!var} | Indirect expansion |
${!var@} | Prefix expansion |
${!var[@]} | Array keys expansion |
${var[@]} | Plain array expansion |
varname=var_one var_one=a-value echo "${varname}" # var_one echo "${var_one}" # a-value echo "${!varname}" # a-value
head_one=foo head_two=bar printf '<%s> ' "${!head@}" # <head_one> <head_two> printf '<%s> ' "${!head*}" # <head_one head_two>
nota: las variables están enganchdas por un espacio, que es el valor por defecto de IFS (espacio, tabulador, nueva_linea)
Array[1]=This Array[2]=is Array[3]=a Array[4]=simple Array[5]=test. printf '<%s> ' "${Array[@]}" # <This> <is> <a> <simple> <test.> printf '<%s> ' "${Array[*]}" # <This is a simple test.>
unset Array # erase any notion of variable array. declare -A Array # make it associative Array=([foo]=one [bar]=two [baz]=three) # give it values. printf '<%s> ' "${Array[@]}" # <two> <three> <one> # List of values. $ printf '<%s> ' "${!Array[@]}" # <bar> <baz> <foo> # List of keys $ printf '<%s> ' "${Array[*]}" # <two three one> # One string of list of values. $ printf '<%s> ' "${!Array[*]}" # <bar baz foo> # One string of list of keys.
/vía: https://unix.stackexchange.com/questions/247589/usage-of-in-parameter-expansion