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:
|
||||
|
||||
```sh
|
||||
docker pull koalaman/shellcheck:latest # Or :v0.4.6 for a release version
|
||||
docker run -v "$PWD:/mnt" koalaman/shellcheck myscript
|
||||
```
|
||||
|
||||
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`):
|
||||
|
||||
```sh
|
||||
export PATH="$HOME/.cabal/bin:$PATH"
|
||||
```
|
||||
|
||||
Log out and in again, and verify that your PATH is set up correctly:
|
||||
|
||||
```sh
|
||||
$ which shellcheck
|
||||
~/.cabal/bin/shellcheck
|
||||
```
|
||||
|
||||
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,
|
||||
|
@ -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:
|
||||
|
||||
```sh
|
||||
echo $1 # Unquoted variables
|
||||
find . -name *.ogg # Unquoted find/grep patterns
|
||||
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 'Path is $PATH' # Variables in single quotes
|
||||
trap "echo Took ${SECONDS}s" 0 # Prematurely expanded trap
|
||||
```
|
||||
|
||||
### Conditionals
|
||||
|
||||
ShellCheck can recognize many types of incorrect test statements.
|
||||
|
||||
```sh
|
||||
[[ n != 0 ]] # Constant test expressions
|
||||
[[ -e *.mpg ]] # Existence checks of globs
|
||||
[[ $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 $(..)
|
||||
[[ "$$file" == *.jpg ]] # Comparisons that can't succeed
|
||||
(( 1 -lt 2 )) # Using test operators in ((..))
|
||||
```
|
||||
|
||||
### Frequently misused commands
|
||||
|
||||
ShellCheck can recognize instances where commands are used incorrectly:
|
||||
|
||||
```sh
|
||||
grep '*foo*' file # Globs in regex contexts
|
||||
find . -exec foo {} && bar {} \; # Prematurely terminated find -exec
|
||||
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'
|
||||
find -name \*.bak -o -name \*~ -delete # Implicit precedence in find
|
||||
f() { whoami; }; sudo f # External use of internal functions
|
||||
```
|
||||
|
||||
### Common beginner's mistakes
|
||||
|
||||
ShellCheck recognizes many common beginner's syntax errors:
|
||||
|
||||
```sh
|
||||
var = 42 # Spaces around = in assignments
|
||||
$foo=42 # $ in assignments
|
||||
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
|
||||
if $(myfunction); then ..; fi # Wrapping commands in $()
|
||||
else if othercondition; then .. # Using 'else if'
|
||||
```
|
||||
|
||||
### Style
|
||||
|
||||
ShellCheck can make suggestions to improve style:
|
||||
|
||||
```sh
|
||||
[[ -z $(find /tmp | grep mpg) ]] # Use grep -q instead
|
||||
a >> log; b >> log; c >> log # Use a redirection block 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 "$(date)" # Useless use of echo
|
||||
cat file | grep foo # Useless use of cat
|
||||
```
|
||||
|
||||
### Data and typing errors
|
||||
|
||||
ShellCheck can recognize issues related to data and typing:
|
||||
|
||||
```sh
|
||||
args="$@" # Assigning arrays to strings
|
||||
files=(foo bar); echo "$files" # Referencing arrays as strings
|
||||
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
|
||||
echo "Hello $name" # Unassigned lowercase variables
|
||||
cmd | read bar; echo $bar # Assignments in subshells
|
||||
```
|
||||
|
||||
### Robustness
|
||||
|
||||
ShellCheck can make suggestions for improving the robustness of a script:
|
||||
|
||||
```sh
|
||||
rm -rf "$STEAMROOT/"* # Catastrophic rm
|
||||
touch ./-l; ls * # Globs that could become options
|
||||
find . -exec sh -c 'a && b {}' \; # Find -exec shell injection
|
||||
printf "Hello $name" # Variables in printf format
|
||||
for f in $(ls *.txt); do # Iterating over ls output
|
||||
export MYVAR=$(cmd) # Masked exit codes
|
||||
```
|
||||
|
||||
### 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`:
|
||||
|
||||
```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 -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
|
||||
local var=value # local is undefined in sh
|
||||
time sleep 1 | sleep 5 # Undefined uses of 'time'
|
||||
```
|
||||
|
||||
### Miscellaneous
|
||||
|
||||
ShellCheck recognizes a menagerie of other issues:
|
||||
|
||||
```sh
|
||||
PS1='\e[0;32m\$\e[0m ' # PS1 colors not in \[..\]
|
||||
PATH="$PATH:~/bin" # Literal tilde in $PATH
|
||||
rm “file” # Unicode quotes
|
||||
|
@ -365,6 +388,7 @@ ShellCheck recognizes a menagerie of other issues:
|
|||
echo $((n/180*100)) # Unnecessary loss of precision
|
||||
ls *[:digit:].txt # Bad character class globs
|
||||
sed 's/foo/bar/' file > file # Redirecting to input
|
||||
```
|
||||
|
||||
## Testimonials
|
||||
|
||||
|
|
Loading…
Reference in New Issue