Wie um zu testen, ob eine variable vorhanden ist und initialisiert wurde
Ich muss eine Funktion ausführen, die testen, ob eine variable ist korrekt definiert, in der bash und müssen mit den zugehörigen Wert.
Zum Beispiel, werden diese Variablen initialisiert am Anfang des Skripts.
#!/bin/bash
var1_ID=0x04
var2_ID=0x05
var3_ID=0x06
var4_ID=0x09
Ich würde gerne rufen Sie das Skript mit dem Namen test wie folgt:
./test var1
Sind die derzeit implementierten Funktion:
function Get()
{
if [ $1"_ID" != "" ]; then
echo "here"
echo $(($1_ID))
else
exit 0
fi
}
Ich verstehe nicht, warum ich erhalten here
auch wenn ich geben Sie ./test toto
oder etwas anderes.
Brauche ich einen bestimmten Befehl, wie grep
?
Verwandte: Wie um zu testen, ob eine variable definiert ist, überhaupt in Bash-Versionen vor version 4.2 mit der nounset shell-option?
Es scheint, hat niemand angegeben, aber
Es scheint, hat niemand angegeben, aber
$1"_ID"
bewerten zu "_ID"
wenn $1
existiert nicht. Und daher wird IMMER != to ""
InformationsquelleAutor ogs | 2014-11-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
Werden Sie wahrscheinlich wollen, verwenden Sie die indirekte Erweiterung:
${!variable}
und dann-n
um zu überprüfen, ob Sie definiert wurde:Den indirekte Erweiterung besteht im Aufruf einer variable mit einer anderen Variablen. Das ist, wie der name der Variablen kann verändert werden, anstatt zu sagen:
$a
wir sagen${!var}
undvar=a
.Wenn wir ausführen, erhalten wir:
Vom
man test
:Dies wird als indirekte Erweiterung. Es besteht im Aufruf einer variable mit einer anderen Variablen. Das ist, wie der name der Variablen kann verändert werden, anstatt zu sagen:
$a
wir sagen${!var}
undvar=a
. Lesen Sie mehr in der bash: indirekte Erweiterung, bitte erklären?.Wirklich schön ! Vielen Dank, sehr viel
Und, wie fedorqui wies darauf hin, über einem Artikel können Sie testen, ob etwas mit dem ausbau
${variable+string}
.InformationsquelleAutor fedorqui
Verwenden Sie den Parameter-expansion:
Entfernen Sie den Doppelpunkt, wenn die leere Zeichenfolge ein Gültiger Wert (d.h. Sie nur wollen, um zu testen, definedness).
Wenn Sie nicht möchten, dass das Skript zu stoppen, auf die problem, die Sie verwenden können,
InformationsquelleAutor choroba
In
bash
4.2, können Sie die-v
operator, der in einem bedingten Ausdruck um zu testen, ob eine variable mit dem angegebenen Namen gesetzt.Müssen Sie noch indirekte parameter expansion zu erhalten die Wert.
In
bash
4.3 können Sie einen benannten Verweis, dass das arbeiten mit ihm erleichtert.(
param
Verhalten sich genau wie die variable, auf den es verweist. Ich weiß nicht, ob es einen einfachen Weg, kurz Parsen der Ausgabe vondeclare -p param
, um den Namen der Variablen, auf den es verweist.)InformationsquelleAutor chepner