在linux系統下呼叫shell命令時經常會忽略雙引號和單引號的區別,一般情況下都不會出錯。但是當遇到一些特殊符號時,會出現預想不到的情況。比如我會經常使用echo -e 「password\npassword」 | passwd root 這條命令修改root密碼時出現了異常情況, 由於密碼是隨機生成的, 有一次密碼裡面包含了符號 「$」,在shell中$可以用來引用變數, 當變數不存在時就表示空, 於是就出現這樣的情況,密碼"abc$def" 變成了"abc",用echo可以看到,列印出來的只有"abc", 原因就是因為shell將$def解釋成了對變數的引用。
$ echo -e "abc$def\nabc$def"
abcabc
所見即所得,即輸出時會將單引號內的所有內容都原樣輸出,或者描述為單引號裡面看到的什麼就輸出什麼,稱為強引用。
$ echo -e 'abc$def\nabc$def\\'
abc$def
abc$def\
$ echo 'abc$def\nabc$def\\'
abc$def\nabc$def\\
這裡的 -e 啟用了echo的轉義,所以\n, \都轉義了,去掉-e之後輸出原文
輸出雙引號的所有內容;如果內容中有命令(要反引)、變數、特殊轉義,會先把變數、命令、轉義字元解析出結果,然後在輸出最終內容,這稱為弱引。
$ echo "abc$def\nabc$def"
abc\nabc
$ echo "abc$def\nabc$def\\"
abc\nabc\
$ echo "abc\$def\nabc\$def"
abc$def\nabc$def
可以看到若想在雙引號中輸出特殊符號, 可以用\來轉義,雙引號中\,\的效果是一樣的。 而且\n在雙引號中不算特殊字元, 不會當作換行處理。
一般用於命令,執行的時候命令會被執行,相當於$(),賦值和輸出都要用反引號引起來。
$ echo `date`
2023年 02月 20日 星期六 18:18
:01cst
先執行date, 在執行echo shell中單引號 雙引號 反引號
一 單引號和雙引號 首先,單引號和雙引號,都是為了解決中間有空格的問題。因為空格在linux中時作為乙個很典型的分隔符,比如string1 this is astring,這樣執行就會報錯。為了避免這個問題,因此就產生了單引號和雙引號。他們的區別在於,單引號將剝奪其中的所有字元的特殊含義,而雙引號中...
Shell單引號,雙引號,反引號,反斜槓
shell單引號,雙引號,反引號,反斜槓 shell可以識別4種不同型別的引字符號 單引號字元 雙引號字元 反斜槓字元 反引號字元 1.單引號 grep susan phonebook susan goldberg 403 212 4921 susan topple 212 234 2343 如果我...
shell中的單引號 雙引號 反引號
在shell中引號分為三種 單引號,雙引號和反引號。由單引號括起來的字元都作為普通字元出現。特殊字元用單引號括起來以後,也會失去原有意義,而只作為普通字元解釋。單引號用於保持引號內所有字元的字面值,即使引號內的 和回車也不例外,但是字串中不能出現單引號。注意是所有,只是單引號本身不能夠出現在其中 例...