Bitte beachten Sie dieses einfache Skript mit dem Namen test :
#!/bin/bash
echo $1
und die folgenden Befehle und Aufrufe:
$ echo "A B"
A B
$ echo ""A B""
A B
$ echo """A B"""
A B
$ echo """A B"""
A B
$ ./test "A B"
A B
$ ./test ""A B""
A
$ ./test """A B"""
A B
$ ./test """"A B""""
A
Könnte jemand bitte , warum der Anruf von erklären Test doens't verhalten sich wie der Befehl echo oder Punkt auf der entsprechenden Dokumentation?
shell-script
quoting
Toliveira
quelle
quelle
printf '%q\n' "$@"
stattecho
überhaupt zu verwenden, wodurch Ihre Argumente einzeln mit versteckten Zeichen und Leerzeichen in sichtbarer Form ausgegeben werden.Antworten:
Weil alle it-Argumente
echo
verkettet werden, um sie zu drucken, und Ihr Skript auf das erste Argument beschränkt ist. Sie sollten verwenden und nicht in Ihrem Skript."$@"
$1
Schauen wir uns die Argumente an, die Sie für Ihre Tests angeben:
./test "A B"
./test ""A B""
./test """A B"""
./test """"A B""""
Hinweis: Sie würden andere Ergebnisse sehen, als
echo
wenn Sie mehr als ein Leerzeichen in Ihren Argumenten verwendet hätten. Das liegt daran, dass echo seine Argumente mit einem einzigen Leerzeichen verkettet:quelle