if -else nello script della shell, abbinando l'argomento alla stringa


0

Per il seguente script di shell:

#!/bin/sh
main_version=0
feature_version=0
patch_version=0
if [[ $1 -eq "m" ]]; then
    main_version=$((main_version+1))
fi

if [[ $1 -eq "f" ]]; then
    feature_version=$((feature_version+1))
fi

if [[ $1 -eq "p" ]]; then
    patch_version=$((patch_version+1))
fi

echo $main_version
echo $feature_version
echo $patch_version

Sta incrementando tutte le variabili anche se passo mcome argomento usando./<script-name>.sh m

Qual è la ragione?

Risposte:


4

-equsa il confronto aritmetico. Le operazioni matematiche trattano gli operandi non numerici come 0, quindi stai solo verificando [[ 0 -eq 0 ]]in tutti e tre i casi.

Per il confronto delle stringhe [ "x" = "y" ]invece. (Questa è la sintassi della shell POSIX.)

La sintassi di Bash è [[ x == y ]]con double =, ma non è una buona idea usare bashisms / kshisms quando l'intestazione dello script dichiara / bin / sh. Modificare l'intestazione per richiedere Bash o attenersi solo alla sintassi della shell POSIX.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.