Merge pull request #1026 from PeterDaveHello/patch-1
Enable syntax highlight in README.md code block
This commit is contained in:
commit
5d9cb81008
24
README.md
24
README.md
|
@ -148,8 +148,10 @@ On Solus:
|
||||||
|
|
||||||
From Docker Hub:
|
From Docker Hub:
|
||||||
|
|
||||||
|
```sh
|
||||||
docker pull koalaman/shellcheck:latest # Or :v0.4.6 for a release version
|
docker pull koalaman/shellcheck:latest # Or :v0.4.6 for a release version
|
||||||
docker run -v "$PWD:/mnt" koalaman/shellcheck myscript
|
docker run -v "$PWD:/mnt" koalaman/shellcheck myscript
|
||||||
|
```
|
||||||
|
|
||||||
or use `koalaman/shellcheck-alpine` if you want a larger Alpine Linux based image to extend.
|
or use `koalaman/shellcheck-alpine` if you want a larger Alpine Linux based image to extend.
|
||||||
|
|
||||||
|
@ -209,12 +211,16 @@ This will compile ShellCheck and install it to your `~/.cabal/bin` directory.
|
||||||
|
|
||||||
Add this directory to your `PATH` (for bash, add this to your `~/.bashrc`):
|
Add this directory to your `PATH` (for bash, add this to your `~/.bashrc`):
|
||||||
|
|
||||||
|
```sh
|
||||||
export PATH="$HOME/.cabal/bin:$PATH"
|
export PATH="$HOME/.cabal/bin:$PATH"
|
||||||
|
```
|
||||||
|
|
||||||
Log out and in again, and verify that your PATH is set up correctly:
|
Log out and in again, and verify that your PATH is set up correctly:
|
||||||
|
|
||||||
|
```sh
|
||||||
$ which shellcheck
|
$ which shellcheck
|
||||||
~/.cabal/bin/shellcheck
|
~/.cabal/bin/shellcheck
|
||||||
|
```
|
||||||
|
|
||||||
On native Windows, the `PATH` should already be set up, but the system
|
On native Windows, the `PATH` should already be set up, but the system
|
||||||
may use a legacy codepage. In `cmd.exe`, `powershell.exe` and Powershell ISE,
|
may use a legacy codepage. In `cmd.exe`, `powershell.exe` and Powershell ISE,
|
||||||
|
@ -242,6 +248,7 @@ So what kind of things does ShellCheck look for? Here is an incomplete list of d
|
||||||
|
|
||||||
ShellCheck can recognize several types of incorrect quoting:
|
ShellCheck can recognize several types of incorrect quoting:
|
||||||
|
|
||||||
|
```sh
|
||||||
echo $1 # Unquoted variables
|
echo $1 # Unquoted variables
|
||||||
find . -name *.ogg # Unquoted find/grep patterns
|
find . -name *.ogg # Unquoted find/grep patterns
|
||||||
rm "~/my file.txt" # Quoted tilde expansion
|
rm "~/my file.txt" # Quoted tilde expansion
|
||||||
|
@ -252,11 +259,13 @@ ShellCheck can recognize several types of incorrect quoting:
|
||||||
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
|
||||||
|
```
|
||||||
|
|
||||||
### Conditionals
|
### Conditionals
|
||||||
|
|
||||||
ShellCheck can recognize many types of incorrect test statements.
|
ShellCheck can recognize many types of incorrect test statements.
|
||||||
|
|
||||||
|
```sh
|
||||||
[[ n != 0 ]] # Constant test expressions
|
[[ n != 0 ]] # Constant test expressions
|
||||||
[[ -e *.mpg ]] # Existence checks of globs
|
[[ -e *.mpg ]] # Existence checks of globs
|
||||||
[[ $foo==0 ]] # Always true due to missing spaces
|
[[ $foo==0 ]] # Always true due to missing spaces
|
||||||
|
@ -268,11 +277,13 @@ 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 ((..))
|
||||||
|
```
|
||||||
|
|
||||||
### Frequently misused commands
|
### Frequently misused commands
|
||||||
|
|
||||||
ShellCheck can recognize instances where commands are used incorrectly:
|
ShellCheck can recognize instances where commands are used incorrectly:
|
||||||
|
|
||||||
|
```sh
|
||||||
grep '*foo*' file # Globs in regex contexts
|
grep '*foo*' file # Globs in regex contexts
|
||||||
find . -exec foo {} && bar {} \; # Prematurely terminated find -exec
|
find . -exec foo {} && bar {} \; # Prematurely terminated find -exec
|
||||||
sudo echo 'Var=42' > /etc/profile # Redirecting sudo
|
sudo echo 'Var=42' > /etc/profile # Redirecting sudo
|
||||||
|
@ -283,11 +294,13 @@ ShellCheck can recognize instances where commands are used incorrectly:
|
||||||
exec foo; echo "Done!" # Misused 'exec'
|
exec foo; echo "Done!" # Misused 'exec'
|
||||||
find -name \*.bak -o -name \*~ -delete # Implicit precedence in find
|
find -name \*.bak -o -name \*~ -delete # Implicit precedence in find
|
||||||
f() { whoami; }; sudo f # External use of internal functions
|
f() { whoami; }; sudo f # External use of internal functions
|
||||||
|
```
|
||||||
|
|
||||||
### Common beginner's mistakes
|
### Common beginner's mistakes
|
||||||
|
|
||||||
ShellCheck recognizes many common beginner's syntax errors:
|
ShellCheck recognizes many common beginner's syntax errors:
|
||||||
|
|
||||||
|
```sh
|
||||||
var = 42 # Spaces around = in assignments
|
var = 42 # Spaces around = in assignments
|
||||||
$foo=42 # $ in assignments
|
$foo=42 # $ in assignments
|
||||||
for $var in *; do ... # $ in for loop variables
|
for $var in *; do ... # $ in for loop variables
|
||||||
|
@ -298,11 +311,13 @@ ShellCheck recognizes many common beginner's syntax errors:
|
||||||
echo "Argument 10 is $10" # Positional parameter misreference
|
echo "Argument 10 is $10" # Positional parameter misreference
|
||||||
if $(myfunction); then ..; fi # Wrapping commands in $()
|
if $(myfunction); then ..; fi # Wrapping commands in $()
|
||||||
else if othercondition; then .. # Using 'else if'
|
else if othercondition; then .. # Using 'else if'
|
||||||
|
```
|
||||||
|
|
||||||
### Style
|
### Style
|
||||||
|
|
||||||
ShellCheck can make suggestions to improve style:
|
ShellCheck can make suggestions to improve style:
|
||||||
|
|
||||||
|
```sh
|
||||||
[[ -z $(find /tmp | grep mpg) ]] # Use grep -q instead
|
[[ -z $(find /tmp | grep mpg) ]] # Use grep -q instead
|
||||||
a >> log; b >> log; c >> log # Use a redirection block instead
|
a >> log; b >> log; c >> log # Use a redirection block instead
|
||||||
echo "The time is `date`" # Use $() instead
|
echo "The time is `date`" # Use $() instead
|
||||||
|
@ -311,11 +326,13 @@ ShellCheck can make suggestions to improve style:
|
||||||
echo $(($RANDOM % 6)) # Don't use $ on variables in $((..))
|
echo $(($RANDOM % 6)) # Don't use $ on variables in $((..))
|
||||||
echo "$(date)" # Useless use of echo
|
echo "$(date)" # Useless use of echo
|
||||||
cat file | grep foo # Useless use of cat
|
cat file | grep foo # Useless use of cat
|
||||||
|
```
|
||||||
|
|
||||||
### Data and typing errors
|
### Data and typing errors
|
||||||
|
|
||||||
ShellCheck can recognize issues related to data and typing:
|
ShellCheck can recognize issues related to data and typing:
|
||||||
|
|
||||||
|
```sh
|
||||||
args="$@" # Assigning arrays to strings
|
args="$@" # Assigning arrays to strings
|
||||||
files=(foo bar); echo "$files" # Referencing arrays as strings
|
files=(foo bar); echo "$files" # Referencing arrays as strings
|
||||||
declare -A arr=(foo bar) # Associative arrays without index
|
declare -A arr=(foo bar) # Associative arrays without index
|
||||||
|
@ -324,22 +341,26 @@ ShellCheck can recognize issues related to data and typing:
|
||||||
var=World; echo "Hello " var # Unused lowercase variables
|
var=World; echo "Hello " var # Unused lowercase variables
|
||||||
echo "Hello $name" # Unassigned lowercase variables
|
echo "Hello $name" # Unassigned lowercase variables
|
||||||
cmd | read bar; echo $bar # Assignments in subshells
|
cmd | read bar; echo $bar # Assignments in subshells
|
||||||
|
```
|
||||||
|
|
||||||
### Robustness
|
### Robustness
|
||||||
|
|
||||||
ShellCheck can make suggestions for improving the robustness of a script:
|
ShellCheck can make suggestions for improving the robustness of a script:
|
||||||
|
|
||||||
|
```sh
|
||||||
rm -rf "$STEAMROOT/"* # Catastrophic rm
|
rm -rf "$STEAMROOT/"* # Catastrophic rm
|
||||||
touch ./-l; ls * # Globs that could become options
|
touch ./-l; ls * # Globs that could become options
|
||||||
find . -exec sh -c 'a && b {}' \; # Find -exec shell injection
|
find . -exec sh -c 'a && b {}' \; # Find -exec shell injection
|
||||||
printf "Hello $name" # Variables in printf format
|
printf "Hello $name" # Variables in printf format
|
||||||
for f in $(ls *.txt); do # Iterating over ls output
|
for f in $(ls *.txt); do # Iterating over ls output
|
||||||
export MYVAR=$(cmd) # Masked exit codes
|
export MYVAR=$(cmd) # Masked exit codes
|
||||||
|
```
|
||||||
|
|
||||||
### Portability
|
### Portability
|
||||||
|
|
||||||
ShellCheck will warn when using features not supported by the shebang. For example, if you set the shebang to `#!/bin/sh`, ShellCheck will warn about portability issues similar to `checkbashisms`:
|
ShellCheck will warn when using features not supported by the shebang. For example, if you set the shebang to `#!/bin/sh`, ShellCheck will warn about portability issues similar to `checkbashisms`:
|
||||||
|
|
||||||
|
```sh
|
||||||
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
|
||||||
|
@ -350,11 +371,13 @@ ShellCheck will warn when using features not supported by the shebang. For examp
|
||||||
[ $UID = 0 ] # Variable undefined in dash/sh
|
[ $UID = 0 ] # Variable undefined in dash/sh
|
||||||
local var=value # local is undefined in sh
|
local var=value # local is undefined in sh
|
||||||
time sleep 1 | sleep 5 # Undefined uses of 'time'
|
time sleep 1 | sleep 5 # Undefined uses of 'time'
|
||||||
|
```
|
||||||
|
|
||||||
### Miscellaneous
|
### Miscellaneous
|
||||||
|
|
||||||
ShellCheck recognizes a menagerie of other issues:
|
ShellCheck recognizes a menagerie of other issues:
|
||||||
|
|
||||||
|
```sh
|
||||||
PS1='\e[0;32m\$\e[0m ' # PS1 colors not in \[..\]
|
PS1='\e[0;32m\$\e[0m ' # PS1 colors not in \[..\]
|
||||||
PATH="$PATH:~/bin" # Literal tilde in $PATH
|
PATH="$PATH:~/bin" # Literal tilde in $PATH
|
||||||
rm “file” # Unicode quotes
|
rm “file” # Unicode quotes
|
||||||
|
@ -365,6 +388,7 @@ ShellCheck recognizes a menagerie of other issues:
|
||||||
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
|
||||||
|
```
|
||||||
|
|
||||||
## Testimonials
|
## Testimonials
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue