
BEARBEITEN: Die Anforderung für dynamisch berechnete Variablennamen wurde geändert, da ich dies für meinen Anwendungsfall nicht unbedingt benötige und eine Lösung bereitgestellt wurde, die für mich funktioniert.
Dies ist wahrscheinlich unmöglich, aber hier ist es:
Ich habe ein Bash-Skript, das einige Formatierungs- und Dateitypkonvertierungen an einer Eingabedatei vornimmt, die aus ASCII xyz-Tripeln (Breitengrad, Längengrad, Tiefe) besteht, und verschiedene Ausgabedateitypen erstellt. Ich versuche zu vermeiden, jedes Mal, wenn ich ein Skript wie dieses schreibe, die Ausgabedateinamen ändern zu müssen; ich denke, ich versuche, eine Möglichkeit zu finden, Ausgabedateinamen zu berechnenglobalauf meinem System bei jedem beliebigen Eingabedateinamen, entweder durch „ export
'ing“ der Ausgabedateinamensuffixe in bashrc oder in einer anderen Datei, die in meinen Skripten als Quelle verwendet wird.
In einem typischen Skript würde ich beispielsweise die Ausgabedateinamen dynamisch aus der in der Befehlszeile angegebenen Eingabedatei erstellen:
INPUT=$1
INPUT_SUFFIX=`echo $INPUT | cut -d. -f2`
INPUT_BASE=$(basename $INPUT .$INPUT_SUFFIX)
OUTPUT_TEXT="${INPUT_BASE}txt"
OUTPUT_TIFF="${INPUT_BASE}tif"
OUTPUT_GRID="${INPUT_BASE}grd"
#...etc, plus other output formats
Ich versuche, einen Weg zu finden, diese mühsamen Ausgabedateinamendefinitionen nicht in jedem Skript vornehmen zu müssen. Ich weiß, dass ich den Code jedes Mal einfach kopieren und einfügen könnte, aber es wäre effizienter, einmal und global auf meinem gesamten System zu definieren, wie die Ausgabedateinamen erstellt werden sollen.
Also inbeliebigSkript, das ich schreibe, für jeden Wert von $1
, eine Variable wie $OUTPUT_TIFF
würdebereitswird dynamisch aus der Eingabe berechnet und ergibt "${1}.tif".
Antwort1
Eine einfache Möglichkeit,TROCKENbesteht darin, den allgemeinen Code in eine normale Datei zu schreiben und die Datei jedes Mal als Quelle zu verwenden, wenn Sie sie benötigen. In BashSie können sogar Argumente übergeben. Dies geschieht jedoch „auf Anfrage“ und nicht „dynamisch berechnet“, d. h. wenn $1
sich aus irgendeinem Grund etwas ändert, müssen Sie die Quelle erneut aufrufen, um Ihre Variablen zu aktualisieren.