Ich möchte alle Eingaben, die einem Muster entsprechen, mit Platzhaltern eingeben. Beispiel:
$ cat file_lister.sh
echo $1
$ ls *.txt
file1.txt
file2.txt
file3.txt
$ ./file_lister.sh ./*.txt
file1.txt
Aber ich erwartete, mein Skript zu drucken
file1.txt
file2.txt
file3.txt
Antwort1
Wenn Sie Ihr Skript ausführen:
$ ./file_lister.sh ./*.txt
Die Shell wird ./*.txt
zu erweitert ./file1.txt ./file2.txt ./file3.txt
, sodass Sie nach der Erweiterung tatsächlich Folgendes ausführen:
$ ./file_lister.sh ./file1.txt ./file2.txt ./file3.txt
Ihr Skript druckt das erste Argument:
echo $1
$1
entspricht dem ersten an das Skript übergebenen Argument, das in diesem Fall lautet: ./file1.txt
– Ich würde erwarten, das statt nur zu sehen file1.txt
(es sei denn, Sie haben wirklich ausgeführt ./file_lister.sh *.txt
).
Wie andere in den Kommentaren vorgeschlagen haben, wenn Sie drucken möchtenalleder Argumente anstelle des ersten, gibt es eine Reihe von Dingen, die Sie tun können. Am einfachsten ist es, $1
(das erste Argument) in $@
(alle Argumente) zu ändern.
#!/bin/bash
printf '%s\n' "$@"
Sehendiese Frage auf Stack Overflowfür weitere Informationen zur Verarbeitung von Argumenten in einem Skript.