繁体   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