DedSec Project

unbound variable — DedSec Project

Bash: unbound variable με ενεργό nounset Περιβάλλον: scripts Bash με set -u ή set -o nounset . Τι αποτυγχάνει Με το nounset, η επέκταση παραμέτρου που δεν έχει οριστεί προκαλεί σφάλμα. Έτσι…

Bash: unbound variable με ενεργό nounset

Περιβάλλον: scripts Bash με set -u ή set -o nounset.

Τι αποτυγχάνει

Με το nounset, η επέκταση παραμέτρου που δεν έχει οριστεί προκαλεί σφάλμα. Έτσι εντοπίζονται λάθη ονομάτων, μεταβλητές περιβάλλοντος που λείπουν ή λάθος σειρά εκτέλεσης. Μια μεταβλητή που έχει οριστεί ως κενή δεν είναι ίδια με μια ανύπαρκτη· ένα default μπορεί να αποκρύψει υποχρεωτική ρύθμιση.

Τοπική αναπαραγωγή

bash -c 'set -u; printf "%s\n" "$MISSING_VALUE"'

Αναμενόμενο: μη μηδενικός κωδικός εξόδου και μήνυμα MISSING_VALUE: unbound variable (η ακριβής διατύπωση διαφέρει ανά έκδοση). Για πραγματικά προαιρετική τιμή:

bash -c 'set -u; printf "%s\n" "${MISSING_VALUE:-guest}"'

Αναμενόμενη έξοδος: guest.

Προαιρετική ή υποχρεωτική ρύθμιση;

Το ${name:-fallback} χρησιμοποιεί την εφεδρική τιμή όταν η μεταβλητή λείπει ή είναι κενή. Το ${name-fallback} μόνο όταν δεν έχει οριστεί. Για υποχρεωτική παράμετρο χρησιμοποίησε : "${TOKEN:?TOKEN is required}", χωρίς να τυπώσεις το ίδιο το μυστικό. Για έλεγχο ύπαρξης σε Bash, μπορείς να χρησιμοποιήσεις [[ -v TOKEN ]].

Βήματα διάγνωσης

  1. Βρες την πρώτη επέκταση μεταβλητής που αναφέρει το error.
  2. Έλεγξε πώς περνούν οι τιμές: ορίσματα, environment, sourcing config files. Υποδιεργασίες κληρονομούν μόνο μεταβλητές που έχουν γίνει export.
  3. Σύγκρινε κεφαλαία/πεζά: API_KEY και api_key διαφέρουν.
  4. Καθόρισε αν η τιμή απαιτείται ή αν επιτρέπεται default και αρχικοποίησε τις τοπικές μεταβλητές.
  5. Δοκίμασε ξεχωριστά ανύπαρκτη, κενή και έγκυρη τιμή.

Bash, sh και Termux

Οι εντολές εδώ εκτελούν Bash ρητά. Αν καλέσεις sh script.sh, σε άλλο περιβάλλον μπορεί να εκτελεστεί διαφορετικό shell. Χρησιμοποίησε σωστό shebang ή bash script.sh για ειδική σύνταξη όπως [[ -v ]]. Μην απενεργοποιείς καθολικά το set -u για να κρύψεις ένα σφάλμα.