From df511650d13f1c375dc3edabd788565bb20d6507 Mon Sep 17 00:00:00 2001 From: Mingye Wang Date: Tue, 3 Nov 2015 08:57:46 -0500 Subject: [PATCH] Updated Sc2086 (markdown) --- Sc2086.md | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/Sc2086.md b/Sc2086.md index 8c5288c..ce01013 100644 --- a/Sc2086.md +++ b/Sc2086.md @@ -25,9 +25,9 @@ Quoting variables prevents word splitting and glob expansion, and prevents the s Strictly speaking, only expansions themselves need to be quoted, but for stylistic reasons, entire arguments with multiple variable and literal parts are often quoted as one: ```sh - $HOME/$dir/dist/bin/$file # Unquoted (bad) - "$HOME"/"$dir"/dist/bin/"$file" # Minimal quoting (good) - "$HOME/$dir/dist/bin/$file" # Canonical quoting (good) +$HOME/$dir/dist/bin/$file # Unquoted (bad) +"$HOME"/"$dir"/dist/bin/"$file" # Minimal quoting (good) +"$HOME/$dir/dist/bin/$file" # Canonical quoting (good) ``` When quoting composite arguments, make sure to exclude globs and brace expansions, which lose their special meaning in double quotes: `"$HOME/$dir/src/*.c"` will not expand, but `"$HOME/$dir/src"/*.c` will. @@ -35,31 +35,31 @@ When quoting composite arguments, make sure to exclude globs and brace expansion Note that `$( )` starts a new context, and variables in it have to be quoted independently: ```sh - echo "This $variable is quoted $(but this $variable is not)" - echo "This $variable is quoted $(and now this "$variable" is too)" -```sh +echo "This $variable is quoted $(but this $variable is not)" +echo "This $variable is quoted $(and now this "$variable" is too)" +``` ### Exceptions Sometimes you want to split on spaces, like when building a command line. ```sh - options="-j 5 -B" - make $options file +options="-j 5 -B" +make $options file ``` Just quoting this doesn't work. Instead, you should have used an array (bash, ksh, zsh): ```bash - options=(-j 5 -B) # ksh: set -A options -- -j 5 -B - make "${options[@]}" file +options=(-j 5 -B) # ksh: set -A options -- -j 5 -B +make "${options[@]}" file ``` or a function (POSIX): ```sh - make_with_flags() { make -j 5 -B "$@"; } - make_with_flags file +make_with_flags() { make -j 5 -B "$@"; } +make_with_flags file ``` -To split on spaces but not perform glob expansion, Posix has a `set -f` to disable globbing. You can disable word splitting by setting IFS="". +To split on spaces but not perform glob expansion, Posix has a `set -f` to disable globbing. You can disable word splitting by setting `IFS=''`.