
Warum wird in diesem einfachen Bash-Skript nicht echo $1
gedruckt ?$1
#!/bin/bash
# function.sh
print_something () {
echo $1
}
print_something
$ ./function.sh 123 -> why doesn't it print '123' as a result?
Antwort1
Positionsparameter beziehen sich auf die Argumente des Skripts in der Hauptebene des Skripts, aber aufFunktionsargumenteim Funktionskörper. Also
print_something Something
würde tatsächlich drucken Something
.
Wenn Sie die Argumente des Skripts an eine Funktion übergeben möchten, müssen Sie dies explizit tun. Verwenden Sie
print_something "$1"
um das erste Argument zu übergeben, oder
print_something "$@"
um sie alle zu übergeben, obwohl die Funktion im Beispiel nur die erste verwendet.
Antwort2
Dies liegt daran, dass eine aufgerufene Funktion ihren eigenen Satz von Positionsparametern erhält, unabhängig vom Satz des übergeordneten Elements bzw. des aufrufenden Elements. Versuchen Sie
print_something "$1"
(und echo "$1"
, oder noch besser printf '%s\n' "$1"
, denken Sie daran, Parametererweiterungen in Anführungszeichen zu setzen, und das echo
kann nicht für beliebige Daten verwendet werden).