variable management escape string bash variables colon variable-subsitution

string - management - ¿Operador de colon Bash en sustitución variable?



bash variable substitution (3)

En bash, ${VAR1:-VAR2} es equivalente a la coalesce(VAR1, VAR2) de SQL coalesce(VAR1, VAR2) , o VAR1 ?? VAR2 C # VAR1 ?? VAR2 VAR1 ?? VAR2 .

En tu caso:

branch_name=`git describe --contains --all HEAD` branch_name=${branch_name:-HEAD}

La primera línea ejecuta el comando git y establece el valor en la variable branch_name , luego, la segunda línea se fusiona en su valor asignando el valor de HEAD si branch_name es nulo.

Como dijo, ${VAR1:NUM} es una operación de prefijo de cadena (a la left en SQL), que cuando se utiliza con un número negativo, como ${VAR1: -NUMBER} convierte en una operación de sufijo ( right ). Tenga en cuenta el espacio en blanco antes del signo menos: si omite ese espacio en blanco, se convierte en la operación de coalesce como he dicho antes.

Heredé algo de código bash y estas dos líneas me están desconcertando:

branch_name=`git describe --contains --all HEAD` branch_name=${branch_name:-HEAD}

Mi comprensión del operador : dos puntos es que crea una subcadena basada en un índice, por lo que usar una cadena, -HEAD en este caso, no tiene ningún sentido.


En este caso, los dos puntos son solo un modificador para el operador - . ${branch-HEAD} se expandiría a "HEAD" solo si la branch está establecida, mientras que ${branch:-HEAD} expande a "HEAD" si la branch es la cadena nula.

$ branch=master $ echo "${branch-HEAD} + ${branch:-HEAD}" master + master $ branch="" $ echo "${branch-HEAD} + ${branch:-HEAD}" + HEAD $ unset branch $ echo "${branch-HEAD} + ${branch:-HEAD}" HEAD + HEAD


Esto toma la variable branch_name , si está definida. Si no está definido, use HEAD lugar.

Vea Shell Expansión de parámetros para más detalles.

Las subcadenas están cubiertas unas líneas más abajo. La diferencia entre los dos es

${parameter:-word}

vs

${parameter:offset} ${parameter:offset:length}