Platzhalter in Anführungszeichen

32

Dies wird einfach sein, aber in meinen Erinnerungen würde die Verwendung von doppelten Anführungszeichen beim Erstellen von Shell-Skripten das Erweitern von Globbing und Variablen ermöglichen.

Aber im folgenden Code:

#!/bin/sh

echo *.sh
echo "*.sh"
echo '*.sh'

echo $LANG
echo "$LANG"
echo '$LANG'

Ich bekomme dieses Ergebnis:

bob.sh redeployJboss.sh
*.sh
*.sh
en_US.utf8
en_US.utf8
$LANG

So verhindern einfache Anführungszeichen globale UND variable Expansion, aber doppelte Anführungszeichen erlauben nur variable Expansion und kein globbing?

Kann ich ein beliebiges Anführungszeichen einfügen?

Tisek
quelle

Antworten:

26

Sie haben Recht: Globbing funktioniert weder in einfachen noch in doppelten Anführungszeichen. Sie können das Globbing jedoch mit Zeichenfolgen in doppelten Anführungszeichen interpolieren:

$ echo "Hallo Welt" * .sh "Auf Wiedersehen Welt"
Hallo Welt [Liste der Dateien] Auf Wiedersehen Welt
Flup
quelle
6
Oder sogar echo "$hello and $goodbye".*(mischen Sie variable Erweiterungen, Leerzeichen und einen Globus in demselben "Wort".
vonbrand
1
Globbing scheint in diesem Fall nicht zu funktionieren echo /path/to/file/*${variable}. Wie kann ich beim Anhängen einer interpolierten E-Mail einen Glob erstellen?
CMCDragonkai
2
@CMCDragonkai echo "$FOLDER_PATH"/*.extensionfunktioniert bei mir einwandfrei , entgegen der akzeptierten Antwort musste ich das Leerzeichen zwischen dem "und dem entfernen *. Ich hoffe es hilft.
LostBalloon
@CMCDragonkai, @LostBalloon Ich verwende das folgende Muster, wenn ich Globs mit Variablen verwenden möchte, die Leerzeichen enthalten können:(cd "$FOLDER_PATH" && echo *.extension)
Steven Darnell