mirror of
https://github.com/koalaman/shellcheck.git
synced 2025-10-03 19:29:44 +08:00
Updated SC2155 (markdown)
14
SC2155.md
14
SC2155.md
@@ -66,15 +66,19 @@ foo="$(mycmd)"
|
|||||||
readonly foo
|
readonly foo
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Word splitting and quoting issue with dash, maybe others
|
## Word splitting and quoting issue with dash, maybe others
|
||||||
|
|
||||||
A serious quoting problem with dash is another reason to declare and assign separately. Dash is the [default, `/bin/sh` shell on Ubuntu](https://wiki.ubuntu.com/DashAsBinSh). More specifically, dash version 0.5.8-2.10 and others cannot run this code:
|
A serious quoting problem with dash is another reason to declare and assign separately. Dash is the [default, `/bin/sh` shell on Ubuntu](https://wiki.ubuntu.com/DashAsBinSh). More specifically, dash version 0.5.8-2.10 and others cannot run this code:
|
||||||
```sh
|
```sh
|
||||||
VAR1='white spa/ce'
|
f(){ local e=$1; }
|
||||||
local var2=$(printf '%s' "${VAR1}")
|
g(){ local g=$(printf '%s' "foo 2"); }
|
||||||
|
f "1 2"
|
||||||
|
g
|
||||||
```
|
```
|
||||||
While this runs fine in other shells, [dash doesn't treat this as an assignment](http://mywiki.wooledge.org/BashPitfalls#local_var.3D.24.28cmd.29) and fails like this:
|
While this runs fine in other shells, [dash doesn't treat this as an assignment](http://mywiki.wooledge.org/BashPitfalls#local_var.3D.24.28cmd.29) and fails like this:
|
||||||
```
|
```
|
||||||
local: spa/ce: bad variable name
|
local: 2: bad variable name
|
||||||
```
|
```
|
||||||
After separating this runs fine in any shell. If you really don't want to separate it, you can double quote the substitutions.
|
The direct workaround to this bug is to quote the right-hand-side of the assignment. Separating declaraction and assignment also makes this runs fine in any shell.
|
||||||
|
|
||||||
|
(A rule to catch this problem is in the works at [#1556](https://github.com/koalaman/shellcheck/issues/1556)).
|
Reference in New Issue
Block a user