GNU/Linux >> Tutoriales Linux >  >> Linux

Código de salida de asignación de variables a sustitución de comandos en Bash

Tenga en cuenta que este no es el caso cuando se combina con local , como en local variable="$(command)" . Ese formulario saldrá con éxito incluso si command fallado.

Tome este script de Bash por ejemplo:

#!/bin/bash

function funWithLocalAndAssignmentTogether() {
    local output="$(echo "Doing some stuff.";exit 1)"
    local exitCode=$?
    echo "output: $output"
    echo "exitCode: $exitCode"
}

function funWithLocalAndAssignmentSeparate() {
    local output
    output="$(echo "Doing some stuff.";exit 1)"
    local exitCode=$?
    echo "output: $output"
    echo "exitCode: $exitCode"
}

funWithLocalAndAssignmentTogether
funWithLocalAndAssignmentSeparate

Aquí está el resultado de esto:

[email protected]:~$ ./tmp.sh 
output: Doing some stuff.
exitCode: 0
output: Doing some stuff.
exitCode: 1

Esto se debe a que local es en realidad un comando incorporado, y un comando como local variable="$(command)" llamadas local después sustituyendo la salida de command . Entonces obtienes el estado de salida de local .


Al ejecutar un comando como $(command) permite que la salida del comando se reemplace a sí misma.

Cuando dices:

a=$(false)             # false fails; the output of false is stored in the variable a

la salida producida por el comando false se almacena en la variable a . Además, el código de salida es el mismo que produce el comando. help false diría:

false: false
    Return an unsuccessful result.

    Exit Status:
    Always fails.

Por otro lado, diciendo:

$ false                # Exit code: 1
$ a=""                 # Exit code: 0
$ echo $?              # Prints 0

hace que el código de salida para la asignación sea a a devolver que es 0 .

EDITAR:

Citando del manual:

Si una de las expansiones contenía una sustitución de comando, el estado de salida del comando es el estado de salida de la última sustitución de comando realizada.

Citando de BASHFAQ/002:

¿Cómo puedo almacenar el valor de retorno y/o la salida de un comando en una variable?

...

output=$(command)

status=$?

La asignación a output no tiene efecto en command el estado de salida de, que todavía está en $? .


Linux
  1. Códigos de salida de la línea de comandos de Bash desmitificados

  2. Bash secuencias de comandos (I)

  3. La diferencia entre los operadores Bash [[ Vs [ Vs ( Vs ((?)

  4. ¿Cita dentro de $ (sustitución de comando) en Bash?

  5. ¿Por qué es legal establecer una variable antes de un comando en Bash?

Variable de exportación de bash

Comando de espera bash

Comando de salida de Bash y códigos de salida

Comando Bash printf

Falla la redirección de la salida del comando a una variable en bash

¿Qué hace la -e en un bash shebang?