mirror of
https://github.com/koalaman/shellcheck.git
synced 2025-10-03 19:29:44 +08:00
Created SC2120 (markdown)
35
SC2120.md
Normal file
35
SC2120.md
Normal file
@@ -0,0 +1,35 @@
|
||||
# foo references arguments, but none are ever passed.
|
||||
|
||||
### Problematic code:
|
||||
|
||||
sayhello() {
|
||||
echo "Hello $1"
|
||||
}
|
||||
sayhello
|
||||
|
||||
`./myscript World` just prints "Hello " instead of "Hello World".
|
||||
|
||||
### Correct code:
|
||||
|
||||
sayhello() {
|
||||
echo "Hello $1"
|
||||
}
|
||||
sayhello "$@"
|
||||
|
||||
`./myscript World` now prints "Hello World".
|
||||
|
||||
### Rationale:
|
||||
|
||||
In a function, `$1` and up refers to the function's parameters, not the script's parameters.
|
||||
|
||||
If you want to process your script's parameters in a function, you have to explicitly pass them. You can do this with `myfunction "$@"`.
|
||||
|
||||
Note that `"$@"` refers to the current context's positional parameters, so if you call a function from a function, you have to pass in `"$@"` to both of them:
|
||||
|
||||
first() { second "$@"; }
|
||||
second() { echo "The first script parameter is: $1"; }
|
||||
first "$@"
|
||||
|
||||
### Contraindications
|
||||
|
||||
If the parameters are optional and you currently just don't want to use them, you can ignore this message.
|
Reference in New Issue
Block a user