$ {parámetro: = palabra} Asignar valores predeterminados. Si el parámetro no está establecido o es nulo, la expansión de la palabra se asigna al parámetro. El valor del parámetro se sustituye entonces. Los parámetros posicionales y los parámetros especiales no pueden asignarse de esta manera.
Pensé que podría usar esta función para escribir en ${LONG_VARIABLE_NAME:=hello}
lugar de la más larga LONG_VARIABLE_NAME=${LONG_VARIABLE_NAME:-hello}
, pero ahora bash también intenta ejecutar 'hola' y eso da un comando no encontrado. ¿Alguna forma de evitar eso? ¿O tendré que apegarme a lo último? ¿Alguien puede dar un ejemplo donde la asignación predeterminada es realmente útil?
Respuestas:
Use dos puntos:
Los dos puntos son un comando nulo que no hace nada e ignora sus argumentos. Está integrado en bash, por lo que no se crea un nuevo proceso.
fuente
: ${A:=hello}
es exactamente el mismo tiempo queA=${A:-hello}
. También parece que este último es un poco menos esotérico y su intención es más clara. El uso:
, que es básicamente un no-op, parece torpe en comparación con la forma en que el OP lo estaba haciendo antes.:
enfoque sería preferible, tanto para escribir como para leer. Sí, esto parece un área en la que Bash podría mejorar un poco.: ${VERY_LONG_VARIABLE_NAME:=hello}
vsVERY_LONG_VARIABLE_NAME=${VERY_LONG_VARIABLE_NAME:-hello}
. : . Espero que utiliza los nombres de variables descriptivas en su código :)VERY_LONG_VARIABLE_NAME=${VERY_LOGN_VARIABLE_NAME:-hello}
. UpsA=$A:-hello
enfoque es que se documenta automáticamente cuando se ejecuta conset -x
. Es decir, la asignación se imprimirá comoA=hello
mientras que el comando nulo solo imprimiría el valor (hello
).Consulte http://www.tldp.org/LDP/abs/html/parameter-substitution.html para ver ejemplos.
Si el parámetro no está configurado, use el predeterminado. Después de la llamada, el parámetro aún no está configurado.
Ambas formas son casi equivalentes. El extra solo
:
hace la diferencia cuando el parámetro ha sido declarado, pero es nulo.Si el parámetro no está configurado, configure el valor del parámetro como predeterminado.
Ambas formas casi equivalentes. El: hace la diferencia solo cuando el parámetro ha sido declarado y es nulo
Si se establece un parámetro, use alt_value, de lo contrario use una cadena nula. Después de la llamada, el valor del parámetro no ha cambiado.
Ambas formas casi equivalentes. El: hace la diferencia solo cuando el parámetro ha sido declarado y es nulo
fuente
La expansión del parámetro de valor predeterminado a menudo es útil en scripts de compilación como el ejemplo a continuación. Si el usuario simplemente llama al script tal como está, perl no se integrará. El usuario debe establecer explícitamente
WITH_PERL
un valor distinto de "no" para que se incorpore.Construir sin Perl
Construye con Perl
fuente