提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供 中文繁体 英文版本 中英对照 版本,有任何建议请联系yoyou2525@163.com。
在阅读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.