it-swarm-eu.dev

Jaký je význam $? ve skriptu Shell?

Když jsem procházel jeden skript Shell, viděl jsem výraz „$?“. Jaký je význam tohoto termínu?

37
Renjith G

$? expanduje do stavu ukončení naposledy spuštěného potrubí v popředí. Viz Zvláštní parametry v manuálu Bash .

Zjednodušeně řečeno, je to stav ukončení posledního příkazu.

43
cjm

Cjmova odpověď je správná, ale $? lze použít v hloupých skriptech ve skriptech Shell a rád bych na to varoval. Mnoho špatných skriptů Shell má opakovaný vzorec kódu:

run_some_command
EXIT_STATUS=$?

if [ "$EXIT_STATUS" -eq "0" ]
then
    # Do work when command exists on success
else
    # Do work for when command has a failure exit
fi

Pokud je to vůbec možné (týká se čitelnosti občas), měli byste tuto situaci kódovat jinak:

if run_some_command
then
    # Do work when command exists on success
else
    # Do failure exit work
fi

Toto druhé použití je rychlejší, neznečišťuje Shellův proměnný jmenný prostor tím, co se rovná dočasným proměnným, může být pro lidi často mnohem čitelnější a podporuje použití „pozitivní logiky“, praxe psaní podmíněností bez negací, která má kognitivní jednoduchost ve většině situací. Odstraňuje to s použitím $? z větší části.

26
Bruce Ediger

Kromě toho, co cjm řekl , pokud hodnota $? je 0, pak se předchozí proces ukončil normálně (nebo úspěšně). Jinak došlo k nějaké chybě.

3
Barun

$?- Stav ukončení posledního provedeného příkazu.

$0- Název souboru aktuálního skriptu.

$#- Počet argumentů zadaných do skriptu.

$$- Číslo procesu aktuálního prostředí. U skriptů Shell je to ID procesu, pod kterým jsou prováděny.

3
Midhun S Sivan

$? poskytněte nám stav provádění posledního vykonaného příkazu na výzvě. Hodnota '0' označuje, že příkaz byl úspěšně proveden a '1' není úspěšný.

0
Rahul Arora