Ich möchte ein Bash-Skript, das mehrere Umgebungsvariablen (Benutzer-ID, Passwort, Token) auf einige Standardwerte setzt, wenn sie noch nicht vorhanden sind. Der Existenztest funktioniert auf der CLI, aber nicht im Skript.
magilla@raspberrypi:~ $ ps -p $$
PID TTY TIME CMD
3005 pts/0 00:00:05 bash
magilla@raspberrypi:~ $ echo "${BASH_VERSION}"
5.1.4(1)-release
magilla@raspberrypi:~ $ env | grep var
magilla@raspberrypi:~ $ [[ -v var ]] && echo "\${var} not defined" || echo "\${var} is defined"
${var} not defined
magilla@raspberrypi:~ $ cat myscript
#!/bin/bash
[[ -v var ]] && echo "\${var} not defined" || echo "\${var} is defined"
magilla@raspberrypi:~ $ bash myscript
${var} is defined
magilla@raspberrypi:~ $ bash < myscript
${var} is defined
Antwort1
Anscheinend var
ist es in Ihrer interaktiven Shell festgelegt (es ist jedoch nicht in der Umgebung). [[ -v var ]]
Gibt dann Erfolg zurück und echo "\${var} not defined"
wird ausgeführt.
Sie sehen not defined
, weil die Logik Ihres Codes falsch ist.
Ist im Skript var
nicht festgelegt, [[ -v var ]]
gibt einen Fehler zurück und echo "\${var} is defined"
wird ausgeführt.
Sie sehen is defined
, die Logik ist wieder einmal falsch. Die folgende Logik ergibt Sinn:
[[ -v var ]] && echo "\${var} is defined" || echo "\${var} not defined"
Es widerspricht der Logik Ihres Codes.