首页 新闻 会员 周边 捐助

怎么想到$’ ‘来处理换行符,是一个意思把

0
[已关闭问题] 关闭于 2025-12-31 01:23

“把  $'...'  当作处理换行符的手段”,这确实是很多 Shell 老手的惯用思维

 

'...' 的本职工作:ANSI-C 引用
首先, '...' 的正式名字叫 ANSI-C Quoting。
它的核心任务是:把像 n 、 t 这样的转义序列,翻译成真正的控制字符(换行、制表符)。

● 普通单引号 '...' :见啥吃啥, n 就是两个字符 和 n 。
● $'...' :会进行翻译, n 会被翻译成一个真正的“换行符”。

它是用来保护包含换行符、单引号、反斜杠的复杂文本,防止 Shell 解析器在半路把命令截断。

这就是为什么在那个复杂的嵌套 SSH 命令中,你会看到 bash -c $'...' —— 它是为了确保那一长串脚本(可能包含换行和引号)能作为一个完整的整体,被远程的 Bash 正确接收和执行。

bash -c echo 'It's a test
and a new line'

● Shell 解析:
1. bash (命令)
2. -c (参数)
3. echo (参数)
4. 'It' (参数)
5. s (参数) -> 报错!s 是什么?
6. 换行符 -> 命令截断!后面的东西被当成新命令了!

经过 printf '%q' 处理后(有了保护):
printf '%q' 把上面的内容转义成了:

$'echo '\''It\'\''s a test\nand a new line'\'''

bash -c $'echo '\''It\'\''s a test\nand a new line'\'''

●     它看到  $'...' ,它知道:“这是一整块字符串,里面不管有什么  n  或者  ' ,我都不要管,不要切分,直接把它作为  bash -c  的参数传进去。”

*Tesla*的主页 *Tesla* | 小虾三级 | 园豆:1314
提问于:2025-12-31 01:23
< >
分享
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册