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!
Danke! Was ist falsch werden alle Großbuchstaben Variablen? –
@ZachKirsch Nichts wirklich. Sie werden normalerweise von der Shell und den Anwendungen verwendet, sodass Sie möglicherweise etwas anderes überschreiben. – 123
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