Shell命令中單引號,雙引號,反引號的區別

2021-10-19 15:20:47 字數 1102 閱讀 6807

在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中引號分為三種 單引號,雙引號和反引號。由單引號括起來的字元都作為普通字元出現。特殊字元用單引號括起來以後,也會失去原有意義,而只作為普通字元解釋。單引號用於保持引號內所有字元的字面值,即使引號內的 和回車也不例外,但是字串中不能出現單引號。注意是所有,只是單引號本身不能夠出現在其中 例...