Erweitertes Globbing im Skript – was mache ich falsch?

Erweitertes Globbing im Skript – was mache ich falsch?

Ich versuche also, mithilfe eines interaktiven Skripts einen Dateibereich auszuwählen.

Das Endziel besteht darin, den readBefehl zu verwenden, aber zur Demonstration habe ich hier die globVariable manuell zugewiesen

#!/bin/bash
shopt -s extglob
# read -rp "Please enter a globbing string:"$'\n' glob

# This will give me an error (See below)
glob=*2020_04_03_{06..18}.jpg
/bin/ls -la /mnt/drive1/images/*/*/${glob}

# While this will return the desired files
/bin/ls -la /mnt/drive1/images/*/*/*2020_04_03_{06..18}.jpg

Der Fehler lautet wie folgt:

Error /bin/ls: cannot access "/mnt/drive1/images/*/*/*2020_04_03_{06..18}.jpg": No such file or directory

Was also übersehe ich hier beim Zuweisen der globVariable oder beim Anhängen der globVariable an meinen Pfad?

Lösung:

Ich habe eine Lösung gefunden, bin mir aber nicht ganz sicher, warum.

bash <<EOF
/bin/ls -la /mnt/drive1/images/*/*/${glob} 
EOF

wird mir das gewünschte Ergebnis liefern.

Antwort1

Sie können anstelle einer bloßen Variablen eine Array-Zuweisung verwenden.

shopt -s nullglob  ##: just in case there is non match for the glob.

glob=(*2020_04_03_{06..18}.jpg) ##: This will expand the glob * and brace expansion.

/bin/ls -la /mnt/drive1/images/*/*/"${glob[@]}"
  • Das sollte für Ihren Beispielcode funktionieren.

  • Das Problem tritt auf, wenn Sie die Zahlen innerhalb der Klammererweiterung durch eine Variable ersetzen möchten, die von @kusalananda bezüglich der Erweiterungssequenz erwähnt wurde.

  • Fügen Sie die failglobShell-Option hinzu, wenn Sie einen Fehler sehen möchten, und beenden Sie das Programm mit einem Wert ungleich Null, wenn kein passendes Muster vorhanden ist.

verwandte Informationen