Blog.

shell scipt 單引號雙引號差異

其實這篇沒啥內容,就只是用 shell script 時發現一些神奇的小細節(?)

在使用變數的時候要注意一下,可以看下面例子

$ let test=1
$ echo "$test"
> 1
$ echo '$test'
> $test

發現使用單引號沒辦法正確的顯示 test 的變數內容 於是就去查了一下 bash manual 如下:

  • 3.1.2.2 Single Quotes

Enclosing characters in single quotes (‘'’) preserves the literal value of each character within the quotes. A single quote may not occur between single quotes, even when preceded by a backslash.

  • 3.1.2.3 Double Quotes

Enclosing characters in double quotes (‘“’) preserves the literal value of all characters within the quotes, with the exception of ‘$’, ‘`’, ‘\’, and, when history expansion is enabled, ‘!’. When the shell is in POSIX mode (see Bash POSIX Mode), the ‘!’ has no special meaning within double quotes, even when history expansion is enabled. The characters ‘$’ and ‘`’ retain their special meaning within double quotes (see Shell Expansions). The backslash retains its special meaning only when followed by one of the following characters: ‘$’, ‘`’, ‘”’, ‘\’, or newline. Within double quotes, backslashes that are followed by one of these characters are removed. Backslashes preceding characters without a special meaning are left unmodified. A double quote may be quoted within double quotes by preceding it with a backslash. If enabled, history expansion will be performed unless an ‘!’ appearing in double quotes is escaped using a backslash. The backslash preceding the ‘!’ is not removed.

從上面可以知道特殊字元 $` 需要再雙引號下才會有用。

reference

  1. bash manual
  2. stackoverflow