GNU/Linux >> Linux Esercitazione >  >> Linux

Codice di uscita dall'assegnazione della variabile alla sostituzione dei comandi in Bash

Nota che questo non è il caso quando combinato con local , come in local variable="$(command)" . Quel modulo uscirà correttamente anche se command fallito.

Prendi questo script Bash per esempio:

#!/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

Ecco l'output di questo:

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

Questo perché local è in realtà un comando integrato e un comando come local variable="$(command)" chiama local dopo sostituendo l'output di command . Quindi ottieni lo stato di uscita da local .


Dopo aver eseguito un comando come $(command) consente all'output del comando di sostituirsi.

Quando dici:

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

l'output prodotto dal comando false è memorizzato nella variabile a . Inoltre, il codice di uscita è lo stesso prodotto dal comando. help false direbbe:

false: false
    Return an unsuccessful result.

    Exit Status:
    Always fails.

D'altra parte, dicendo:

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

provoca il codice di uscita per l'assegnazione a a da restituire che è 0 .

MODIFICA:

Citando dal manuale:

Se una delle espansioni conteneva una sostituzione di comando, l'exitstatus del comando è lo stato di uscita dell'ultima sostituzione di comando eseguita.

Citando da BASHFAQ/002:

Come posso memorizzare il valore restituito e/o l'output di un comando in una variabile?

...

output=$(command)

status=$?

L'assegnazione a output non ha effetto su command lo stato di uscita di , che è ancora in $? .


Linux
  1. La differenza tra gli operatori Bash [[ Vs [ Vs ( Vs ((?

  2. Citando entro $(sostituzione comando) in Bash?

  3. Perché impostare una variabile prima di un comando è legale in Bash?

  4. Cosa sono i codici di uscita Bash in Linux

  5. Linux bash:assegnazione di più variabili

Variabile di esportazione Bash

Bash wait Comando

Comando di uscita Bash e codici di uscita

Comando Bash printf

`$?` ? È una variabile?

Bash Prompt con il codice dell'ultima uscita