Wie verwende ich Platzhalter für mehrere Ereignisse in einem Shell-Skript?

Wie verwende ich Platzhalter für mehrere Ereignisse in einem Shell-Skript?

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 ./*.txtzu 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

$1entspricht 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.

verwandte Informationen