Bash

試圖逃避引號

  • August 3, 2016

我嘗試了多種方法在腳本中列印這一行:

alias myname='export PATH="/path/to/bin:$PATH"'

他們都有不同的問題。

我最後一次嘗試(記住!)是:

printf '%s' '%s\n' 'alias myname=' ''\'"export PATH=\"/path/to/bin:$PATH\"" \'''  >> ~/.bashrc

但它不起作用,它多次列印PATH目錄並且前面alias myname%sn

(我更喜歡使用 printf)

如果我正確理解了這個問題,那麼您正在嘗試添加該行

alias myname='export PATH="/path/to/bin:$PATH"'

到你的~/.bashrc文件

顯而易見的類型echo將失敗,因為 $PATH 在錯誤的時間展開。

相反,我們需要做一些報價混合:

echo "alias myname='export PATH=\"/path/to/bin:\$PATH\"'" >> ~/.bashrc

現在你說,出於某種原因,你想使用printf. 所以我們可以做類似的事情:

printf "%s\n" "alias myname='export PATH=\"/path/to/bin:\$PATH\"'" >> ~/.bashrc

如果要將兩側=視為單獨的字元串:

printf "%s=%s\n" "alias myname" "'export PATH=\"/path/to/bin:\$PATH\"'" >> ~/.bashrc

等等。

printf只接受一個格式參數,然後是一個值列表)。

引用自:https://unix.stackexchange.com/questions/299826