Wie von Jonathan Leffler erwähnt, können Sie dies mit einem Array tun.
my_array=("file1.txt" "second file.txt" "file3.txt")
cat "${my_array[1]}"
Ein Index des Arrays beginnt bei 0. Wenn Sie also zu cat
die erste Datei in Ihrem Array wollten Sie die Indexnummer 0. "${my_array[0]}"
verwenden würde. Wenn Sie Ihren Befehl für alle Elemente ausführen möchten, ersetzen Sie die Indexnummer durch @
oder *
. Zum Beispiel anstelle von "${my_arryay[0]}"
würden Sie "${my_array[@]}"
verwenden Stellen Sie sicher, dass Sie das Array zitieren, oder es wird jeden Dateinamen mit Leerzeichen als separate Dateien behandeln.
Alternativ, wenn das Array aus irgendeinem Grund ein Problem darstellt, können Sie IFS (das für Internal Field Separator steht) gleich einem Newline setzen. Wenn Sie dies tun, ist es eine gute Idee, das Standard-IFS vor dem Ändern in eine Variable zu speichern, damit Sie es auf die Art zurücksetzen können, die es nach Abschluss des Skripts war. Zum Beispiel:
Es ist wahrscheinlich besser, nicht mit IFS rumzualbern, es sei denn, Sie müssen. Wenn Sie das Array angeben können, damit Ihr Skript funktioniert, sollten Sie das tun.
Für eine viel mehr in die Tiefe Blick in Arrays sehen:
Sie eine Variable nicht verwenden; Verwenden Sie ein Array: 'ARGS = (" file1.txt "" zweite Datei.txt "" file3.txt ") und übergeben Sie es dann:' "$ {ARGS [@]}" '. –
Wenn die Einstellungen in einer Textdatei sind und das Trennzeichen zwischen Argumenten ein Leerzeichen ist, sehe ich nicht, warum Sie das Verhalten, das Sie sehen, als falsch ansehen. Ich meine, ich kann sehen, was Sie tun möchten, aber das Lesen von Leerzeichen getrennten Argumenten aus einer Textdatei ist wahrscheinlich die falsche Lösung. Vielleicht verwenden Sie ein strukturiertes Dateiformat, wenn Ihre Anforderungen komplex sind. – tripleee