Warum druckt $1 in einer Funktion nicht das erste Argument des Skripts?

Warum druckt $1 in einer Funktion nicht das erste Argument des Skripts?

Warum wird in diesem einfachen Bash-Skript nicht echo $1gedruckt ?$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 echokann nicht für beliebige Daten verwendet werden).

verwandte Informationen