- 论坛徽章:
- 1
|
哦. 其實還要看 " "(雙引) 跟 ' '(單引) 的差別呢.
基本上, 我個人的理解是(不見得正確):
在 soft quote 中, \ 後面的 char 是否為 meta 將是關鍵.
如果是 meta, shell 會先處理. 如果不是 meta, 那就不處理, 因此 "\u" 還是 \u, "\\u" 也是 \u.
那麼, 在 shell 裡, 假如你用 "\\u", 因為是在 soft quote 裡,
因此 shell 先將 \\ 變成 \ , 然後在 PS1 裡就是 \u , 這個 \u 是有意義的.
然而, 若換成 '\\u', 因為在 hard quote 裡, 那 shell 是不做任何處理,
那麼, 在 PS1 中就是 \\u, 那 \\ 就將 \ 的功能被關了, 因此得到一條 \ 跟 u .
so... 讓我回頭來看:
[ "$PS1" = "\\s-\\v\\\$ " ] && PS1="[\u@\h \W]\\$ "
第一個命令是 test, 看看 $PS1 的結果是不是 \s-\v\$,
如果是(&&), 那就將 PS1 修改為 [\u@\h \W]\$ 這個式樣.
讓我們來做個實驗:
kenny@x40:~> su - #先換成管理員
密碼:
x40:~ # bash # 進入 subshell
x40:~ # PS1='\s-\v\$ ' # 用 hard quote
bash-3.1# PS1="\s-\v\$ " # 用 soft quote, 但要知道 \ 後面的 $ 是 meta, 所以 \$ 已經被 shell 處理為 $
# 因此下個 prompt 最後(紅色部份)是 $ 而不是 # , 因為在 PS1 裡, 最後是 $ 而不是 \$
bash-3.1$ PS1='[\u@\h \W]\$ ' # 然後再用 hard quote, 所以 \$ 不變, 在 PS1 還是 \$
[root@x40 ~]# PS1="[\u@\h \W]\\$ " # 這次我們學乖了, 在 soft quote 中先用 \\ 再接 $, 經處理後於 PS1 裡就是 \$
[root@x40 ~]# |
|