这个 sed 里,关于单引号双引号的用法,应该是去查阅 shell 的资料吗?

84 天前
 amiwrong123
code=FF
sed -i 's/111/0x'"$code"'/' $file

比如上面这个代码,最终效果等于sed -i 's/111/0xFF/' $file

上面的过程是这样的吗?

另外主要对 shell 脚本不太熟,上面这个命令在$code 外面用了单引号和双引号,想彻底搞清楚这些用法,有什么官方链接吗? (比如类似 https://www.gnu.org/software/sed/manual/sed.html )( PS:当然我也会先看看中文博客讲解,后面需要查询特定技巧时 可能再来看这种官方链接)

1141 次点击
所在节点    问与答
9 条回复
ysc3839
84 天前
是 shell 解析。
Unix 传递给程序的参数,是多个字符串,由 shell 解析单个字符串。

Windows 程序参数是单个字符串,由程序自己解析。
ho121
84 天前
's/111/0x'"$code"'/'
分 3 部分
's/111/0x'
"$code"
'/'
amiwrong123
84 天前
@ho121
好吧,原来是这么看的呀,我还理解错了。我还以为是单引号,里面又有单引号
amiwrong123
84 天前
@ho121
然后"$code"会变成'FF',这么理解吗?
然后 这三个 单引号对(都是单引号对了),就合成了一个字符串。
YGHMXFAL
84 天前
以 BASH 为例:

由"(双引号)闭合,表示内部需要被转义,比如说,MyVar="${code}",最终 MyVar 的值是[FF]

由'(单引号)闭合,表示内部不需要转义,比如说,MyVar='${code}',最终 MyVar 的值是[${code}]

还有一种特殊闭合,MyVar=$'\r\n',在闭合内部可以指定各种转义序列,当你要调整 IFS 的时候大概率会用到这种闭合

其实楼主这段代码我不甚理解,不应该是这样吗

sed -i "s/111/0x${code}/" ${file}

中间为啥又要单引号又要双引号?既不直观也不美观啊?
YGHMXFAL
84 天前
原来是#2 老哥所说,学到了
amiwrong123
84 天前
@YGHMXFAL
谢谢解释。
是别人写的 sh 脚本里面的一句,因为不是很懂,就拿来问一下了~

确实你这个写法好得多,学习了。
PTLin
84 天前
翻了下 gnu 的 bash 文档,这个行为应该叫 quote remove ,是 bash 处理表达式的最后一步,删除',''
https://www.gnu.org/software/bash/manual/html_node/Shell-Expansions.html
amiwrong123
84 天前
@PTLin
谢谢,这应该就是我想要的官方链接~

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1077192

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX