Das erste Beispiel, das Sie gegeben haben, ist korrekt (vorausgesetzt, es ist offensichtlich).
for file in "$workingdir"/*; do
Dies durchläuft eine Liste der Dateien im Verzeichnis, die dem Wert der Variablen entsprechen workingdir
, und funktioniert auch, wenn diese Leerzeichen oder andere lustige Zeichen enthält.
Das zweite Beispiel ist jedoch komplizierter:
if [[ $workingdir == $variable* ]]; then
In diesem Fall wird der Wert der Variablen variable
als Muster und nicht als feste Zeichenfolge behandelt. Wenn beispielsweise variable
"* foo" eingestellt wurde, stimmt die Gesamtbedingung überein, wenn $workingdir
"foo" irgendwo in ihrem Wert enthalten ist. Wenn Sie $variable
eher als wörtliche Zeichenfolge als als Muster behandelt werden *
möchten, müssen Sie sie erneut in doppelte Anführungszeichen setzen (jedoch nicht in die Annahme, dass dies als Platzhalter behandelt werden soll):
if [[ $workingdir == "$variable"* ]]; then
... und ehrlich gesagt, wenn Sie nachverfolgen, wo doppelte Anführungszeichen von Bedeutung sind und wo dies nicht der Fall ist, ist dies mehr Ärger als es wert ist. (dh es ist sicher, sie links =
oder ==
innen zu lassen, [[ ]]
aber nicht rechts oder innen [ ]
). Daher empfehle ich einfach, sie überall doppelt zu zitieren, damit Sie nicht so nah dran bleiben müssen:
if [[ "$workingdir" == "$variable"* ]]; then