2016-08-01 51 views
1

Ich habe Probleme beim Auflösen von Anführungszeichen, um Befehlszeilenargumente in einem Bash-Skript zu erfassen. Ich habe zwei Dateien: hello_world und hello world (beachten Sie das Leerzeichen im zweiten Dateinamen).

Natürlich funktioniert dies:

#!/usr/bin/env bash 
ls "[email protected]" 
$ ./quoted_args.sh hello_world "hello world" 
hello world hello_world 

jedoch keines der folgenden (sehr ähnlich) Skripten arbeiten:

Script A:

#!/usr/bin/env bash 
FILES="[email protected]" 
ls "$FILES" 
$ ./quoted_args.sh hello_world "hello world" 
ls: hello_world hello world: No such file or director 

Script B:

#!/usr/bin/env bash 
[email protected] 
ls "$FILES" 
$ ./quoted_args.sh hello_world "hello world" 
ls: hello_world hello world: No such file or director 

Script C:

#!/usr/bin/env bash 
FILES="[email protected]" 
ls $FILES 
$ ./quoted_args.sh hello_world "hello world" 
ls: hello: No such file or directory 
ls: world: No such file or directory 
hello_world 

Script D:

#!/usr/bin/env bash 
[email protected] 
ls $FILES 
$ ./quoted_args.sh hello_world "hello world" 
ls: hello: No such file or directory 
ls: world: No such file or directory 
hello_world 

Ich habe das Gefühl, ich habe jede Möglichkeit versucht, dies zu tun. Ich würde mich über jede Hilfe oder Einsicht freuen!

Antwort

2

Shop [email protected] in ein Array der Lage sein, es sicher in anderen Befehlen zu verwenden:

# populate files array 
files=("[email protected]") 

# use array 
ls "${files[@]}" 

# or directly use "[email protected]" 
ls "[email protected]" 

auch besser zu vermeiden alle Großvariablennamen in Shell-Skripten verwenden.

+0

Danke! Was ist falsch werden alle Großbuchstaben Variablen? –

+2

@ZachKirsch Nichts wirklich. Sie werden normalerweise von der Shell und den Anwendungen verwendet, sodass Sie möglicherweise etwas anderes überschreiben. – 123

+2

Unix-Shells verwenden alle UPPERCASE-Umgebungsvariablen, z. 'PATH, LINES, LANG' usw. und Sie können einen von ihnen überschreiben, während Sie alle Großbuchstaben verwenden. – anubhava