簡體   English   中英

在shell中使用轉義字符

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM