zsh,分裂擴展%~

zsh,分裂擴展%~

我對此無計可施。我正在使用 zsh 並嘗試簡單地分割%3~字元的擴充/。這與$(pwd)and的擴展配合得很好$PWD- 兩者也是類似路徑的字串。

我正在嘗試使用以下程式碼拆分字串("${(@s./.)a}")- 其中 a 是a=$(pwd)a=%3~。同樣,此程式碼適用於pwd,但不適用於%3~

我對 shell 腳本還是有點陌生——但據我了解,應該沒有差異。無論我做什麼,我都無法%~正確擴展 的 split 。我嘗試過的事情:

# Ran from /home/me/code
a=%3~
b=$(pwd)
c=$PWD
d="/test/1/2"

e=$(echo "$a")
f="/$a"

echo $a # ~/code
echo $b # /home/me/code
echo $c # /home/me/code
echo $d # /test/1/2
echo $e # ~/code
echo $f # /~/code

("${(@s./.)a}") # ~/code
("${(@s./.)b}") # home me code
("${(@s./.)c}") # home me code
("${(@s./.)d}") # test 1 2
("${(@s./.)e}") # ~/code
("${(@s./.)f}") # /~/code

我實際上開始認為 zsh 只是故意不一致。不過,我確信我錯過了什麼。我也嘗試過("${(ps./.)a}"),因為當我讀到它時,我應該做同樣的事情。我還嘗試過基於 IFS 的分割、設定IFS="/".同樣,適用於普通字串 - 不適用於%~.???

編輯:為了完整起見,這是在 .zsh-theme 檔案中。我想也許這很重要?從技術上講,我不是執行它的人(它是由 oh-my-zsh 運行的),所以也許在那個級別發生了一些奇怪的事情。

答案1

您正嘗試在通常評估提示轉義的上下文之外使用提示轉義。所以變數包含字串%3~,您嘗試拆分字串%3~%3~我假設它稍後被分配給PS1/ PROMPT,然後 zsh 擴展它%3~

如果您想執行參數擴展並將字串%3~視為提示轉義,您可以使用參數擴展標誌,%如下所示${(%)a}

相關內容