2012-01-17 20 views
17

¿Cuál es el significado de una variable de bash utilizado como esto:

${Server?} 

Respuesta

23

Funciona casi lo mismo que (desde el bash página del manual):

${parameter:?word}
Display Error if Null or Unset. If parameter is null or unset, the expansion of word (or a message to that effect if word is not present) is written to the standard error and the shell, if it is not interactive, exits. Otherwise, the value of parameter is substituted.

Eso comprobaciones de variante particulares para asegurar que la variable exista s (está definido y no es nulo). Si es así, lo usa. De lo contrario, emite el mensaje de error especificado por word (o uno adecuado si no hay word) y finaliza la secuencia de comandos.

la diferencia real entre eso y la versión no de colon se puede encontrar en el bash página de manual encima de la sección citado:

Cuando no se realiza la expansión de subcadena, utilizando las formas documentan a continuación, bash pruebas para un parámetro eso está desarmado o nulo. Omitir los dos puntos resulta en una prueba solo para un parámetro que está desarmado.

En otras palabras, la sección anterior se puede modificar para leer (básicamente de sacar los bits de "nulo"):

${parameter?word}
Display Error if Unset. If parameter is unset, the expansion of word (or a message to that effect if word is not present) is written to the standard error and the shell, if it is not interactive, exits. Otherwise, the value of parameter is substituted.

La diferencia es ilustrado así:

pax> unset xyzzy ; export plugh= 

pax> echo ${xyzzy:?no} 
bash: xyzzy: no 

pax> echo ${plugh:?no} 
bash: plugh: no 

pax> echo ${xyzzy?no} 
bash: xyzzy: no 

pax> echo ${plugh?no} 

pax> _ 

Allí, puede ver que, aunque las variables nulas y nula dan como resultado un error con :?, solo el error de unset con ?.

+0

Y sin palabra, hay un mensaje de error predeterminado "parámetro nulo o no establecido" (mismo mensaje con o sin dos puntos). –

10

Esto significa que la secuencia de comandos debe abortar si no se define la variable

Ejemplo:

#!/bin/bash 
echo We will see this 
${Server?Oh no! server is undefined!} 
echo Should not get here 

Este script imprimirá el primer eco y el mensaje de error "Oh no! ...".

Ver todas las sustituciones de variables de fiesta aquí: http://tldp.org/LDP/abs/html/parameter-substitution.html

Cuestiones relacionadas