[英]Using escape characters in shell
在閱讀shell中的Escape characters
,我嘗試了一個例子 -
echo“用戶$ USER的余額為:\\ $ 5:00”
它給出了輸出
用戶的余額是:5.00美元
但是,當我嘗試使用轉義字符\\
用制表符\\t
或換行符\\n
,它似乎沒有工作。 我嘗試在雙引號中使用它(轉義字符在雙引號中保留其含義)但它仍然無效。
echo“用戶$ USER的余額為:\\ t \\ $ 5:00”
不給出輸出
用戶的余額是:5:00美元
相反,輸出是 -
用戶vyadav的余額為:\\ t $ 5:00
如果沒有-e
選項, echo
命令不會擴展反斜杠轉義 。
你可以使用echo -e
(請注意,這是一個gnu擴展 ,不是很便攜):
echo -e "The balance for user $USER is:\t\$5:00"
The balance for user anubhava is: $5:00
根據help echo
:
-e enable interpretation of the following backslash escapes
或者更好地使用printf
:
printf "The balance for user %s is:\t\$%s\n" "$USER" "5:00"
要么
printf 'The balance for user %s is:\t$%s\n' "$USER" "5:00"
The balance for user anubhava is: $5:00
有什么樣的差異\\$
是做什么\\t
在做什么。
shell在看到$
時會在雙引號字符串中擴展變量,所以你需要從shell中“轉義” $
(這就是\\$
正在做的事情)。 您還可以使用不擴展變量的單引號。
\\t
另一方面是“反斜杠逃逸”(使用echo
手冊頁使用的術語)。 關於shell的\\t
(用雙引號字符串)沒什么特別的,所以它不會觸及它。 並且,默認情況下,echo不會處理“反斜杠轉義”。 你需要-e
標志來打開它。
很多人認為帶有參數的echo
是一種可憎的,不應該存在,並且使用-e
標志很容易避免使用printf
(它確實在其格式字符串中處理了許多“反斜杠轉義”)。
所以printf
版本就是這樣(注意由於單引號,格式字符串中缺少\\$
)。
printf 'The balance for user %s is:\t$5:00' "$USER"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.