Give more examples of what ShellCheck looks for
This commit is contained in:
parent
788aee1b7c
commit
7b2092b3cd
12
README.md
12
README.md
|
@ -358,6 +358,7 @@ echo 'Don't forget to restart!' # Singlequote closed by apostrophe
|
||||||
echo 'Don\'t try this at home' # Attempting to escape ' in ''
|
echo 'Don\'t try this at home' # Attempting to escape ' in ''
|
||||||
echo 'Path is $PATH' # Variables in single quotes
|
echo 'Path is $PATH' # Variables in single quotes
|
||||||
trap "echo Took ${SECONDS}s" 0 # Prematurely expanded trap
|
trap "echo Took ${SECONDS}s" 0 # Prematurely expanded trap
|
||||||
|
unset var[i] # Array index treated as glob
|
||||||
```
|
```
|
||||||
|
|
||||||
### Conditionals
|
### Conditionals
|
||||||
|
@ -376,6 +377,7 @@ ShellCheck can recognize many types of incorrect test statements.
|
||||||
[ grep -q foo file ] # Command without $(..)
|
[ grep -q foo file ] # Command without $(..)
|
||||||
[[ "$$file" == *.jpg ]] # Comparisons that can't succeed
|
[[ "$$file" == *.jpg ]] # Comparisons that can't succeed
|
||||||
(( 1 -lt 2 )) # Using test operators in ((..))
|
(( 1 -lt 2 )) # Using test operators in ((..))
|
||||||
|
[ x ] & [ y ] | [ z ] # Accidental backgrounding and piping
|
||||||
```
|
```
|
||||||
|
|
||||||
### Frequently misused commands
|
### Frequently misused commands
|
||||||
|
@ -447,6 +449,8 @@ echo "Hello $name" # Unassigned lowercase variables
|
||||||
cmd | read bar; echo $bar # Assignments in subshells
|
cmd | read bar; echo $bar # Assignments in subshells
|
||||||
cat foo | cp bar # Piping to commands that don't read
|
cat foo | cp bar # Piping to commands that don't read
|
||||||
printf '%s: %s\n' foo # Mismatches in printf argument count
|
printf '%s: %s\n' foo # Mismatches in printf argument count
|
||||||
|
eval "${array[@]}" # Lost word boundaries in array eval
|
||||||
|
for i in "${x[@]}"; do ${x[$i]} # Using array value as key
|
||||||
```
|
```
|
||||||
|
|
||||||
### Robustness
|
### Robustness
|
||||||
|
@ -471,6 +475,7 @@ ShellCheck will warn when using features not supported by the shebang. For examp
|
||||||
echo {1..$n} # Works in ksh, but not bash/dash/sh
|
echo {1..$n} # Works in ksh, but not bash/dash/sh
|
||||||
echo {1..10} # Works in ksh and bash, but not dash/sh
|
echo {1..10} # Works in ksh and bash, but not dash/sh
|
||||||
echo -n 42 # Works in ksh, bash and dash, undefined in sh
|
echo -n 42 # Works in ksh, bash and dash, undefined in sh
|
||||||
|
expr match str regex # Unportable alias for `expr str : regex`
|
||||||
trap 'exit 42' sigint # Unportable signal spec
|
trap 'exit 42' sigint # Unportable signal spec
|
||||||
cmd &> file # Unportable redirection operator
|
cmd &> file # Unportable redirection operator
|
||||||
read foo < /dev/tcp/host/22 # Unportable intercepted files
|
read foo < /dev/tcp/host/22 # Unportable intercepted files
|
||||||
|
@ -491,10 +496,15 @@ rm “file” # Unicode quotes
|
||||||
echo "Hello world" # Carriage return / DOS line endings
|
echo "Hello world" # Carriage return / DOS line endings
|
||||||
echo hello \ # Trailing spaces after \
|
echo hello \ # Trailing spaces after \
|
||||||
var=42 echo $var # Expansion of inlined environment
|
var=42 echo $var # Expansion of inlined environment
|
||||||
#!/bin/bash -x -e # Common shebang errors
|
!# bin/bash -x -e # Common shebang errors
|
||||||
echo $((n/180*100)) # Unnecessary loss of precision
|
echo $((n/180*100)) # Unnecessary loss of precision
|
||||||
ls *[:digit:].txt # Bad character class globs
|
ls *[:digit:].txt # Bad character class globs
|
||||||
sed 's/foo/bar/' file > file # Redirecting to input
|
sed 's/foo/bar/' file > file # Redirecting to input
|
||||||
|
var2=$var2 # Variable assigned to itself
|
||||||
|
[ x$var = xval ] # Antiquated x-comparisons
|
||||||
|
ls() { ls -l "$@"; } # Infinitely recursive wrapper
|
||||||
|
alias ls='ls -l'; ls foo # Alias used before it takes effect
|
||||||
|
for x; do for x; do # Nested loop uses same variable
|
||||||
while getopts "a" f; do case $f in "b") # Unhandled getopts flags
|
while getopts "a" f; do case $f in "b") # Unhandled getopts flags
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue