Created SC2120 (markdown)

koalaman
2014-03-01 14:41:30 -08:00
parent 06fdbc1a5f
commit 6666e556a4

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.