GNU/Linux >> Tutoriels Linux >  >> Linux

Code de sortie de l'affectation de variable à la substitution de commande dans Bash

Notez que ce n'est pas le cas lorsqu'il est combiné avec local , comme dans local variable="$(command)" . Ce formulaire se fermera avec succès même si command échoué.

Prenez ce script Bash par exemple :

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

Voici le résultat :

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

C'est parce que local est en fait une commande intégrée, et une commande comme local variable="$(command)" appelle local après en remplaçant la sortie de command . Vous obtenez donc le statut de sortie de local .


Lors de l'exécution d'une commande en tant que $(command) permet à la sortie de la commande de se remplacer elle-même.

Lorsque vous dites :

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

la sortie produite par la commande false est stocké dans la variable a . De plus, le code de sortie est le même que celui produit par la commande. help false dirait :

false: false
    Return an unsuccessful result.

    Exit Status:
    Always fails.

D'autre part, en disant :

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

provoque le code de sortie de l'affectation à a à retourner qui est 0 .

MODIFIER :

Citation du manuel :

Si l'une des extensions contenait une substitution de commande, l'état de sortie de la commande est l'état de sortie de la dernière substitution de commande effectuée.

Citation de BASHFAQ/002 :

Comment puis-je stocker la valeur de retour et/ou la sortie d'une commande dans une variable ?

...

output=$(command)

status=$?

L'affectation à output n'a aucun effet sur command le statut de sortie de , qui est toujours en $? .


Linux
  1. Les codes de sortie de la ligne de commande Bash démystifiés

  2. Script bash (I)

  3. La différence entre les opérateurs bash [[ Vs [ Vs ( Vs ((?

  4. Citation dans $(substitution de commande) dans Bash ?

  5. Pourquoi définir une variable avant une commande est-il légal dans Bash ?

Variable d'exportation bash

Commande d'attente bash

Commande de sortie Bash et codes de sortie

Commande Bash printf

Invite Bash avec le dernier code de sortie

Que fait le -e dans un bash shebang ?