code=FF
sed -i 's/111/0x'"$code"'/' $file
比如上面这个代码,最终效果等于sed -i 's/111/0xFF/' $file
。
上面的过程是这样的吗?:
'"$code"'
进行 shell 的解释。sed -i 's/111/0xFF/' $file
后,sed 命令才开始工作。另外主要对 shell 脚本不太熟,上面这个命令在$code 外面用了单引号和双引号,想彻底搞清楚这些用法,有什么官方链接吗? (比如类似 https://www.gnu.org/software/sed/manual/sed.html )( PS:当然我也会先看看中文博客讲解,后面需要查询特定技巧时 可能再来看这种官方链接)
1
ysc3839 54 天前 via Android
是 shell 解析。
Unix 传递给程序的参数,是多个字符串,由 shell 解析单个字符串。 Windows 程序参数是单个字符串,由程序自己解析。 |
2
ho121 54 天前 via Android 2
's/111/0x'"$code"'/'
分 3 部分 's/111/0x' "$code" '/' |
3
amiwrong123 OP @ho121
好吧,原来是这么看的呀,我还理解错了。我还以为是单引号,里面又有单引号 |
4
amiwrong123 OP |
5
YGHMXFAL 54 天前 via Android
以 BASH 为例:
由"(双引号)闭合,表示内部需要被转义,比如说,MyVar="${code}",最终 MyVar 的值是[FF] 由'(单引号)闭合,表示内部不需要转义,比如说,MyVar='${code}',最终 MyVar 的值是[${code}] 还有一种特殊闭合,MyVar=$'\r\n',在闭合内部可以指定各种转义序列,当你要调整 IFS 的时候大概率会用到这种闭合 其实楼主这段代码我不甚理解,不应该是这样吗 sed -i "s/111/0x${code}/" ${file} 中间为啥又要单引号又要双引号?既不直观也不美观啊? |
6
YGHMXFAL 54 天前 via Android
原来是#2 老哥所说,学到了
|
7
amiwrong123 OP |
8
PTLin 54 天前
翻了下 gnu 的 bash 文档,这个行为应该叫 quote remove ,是 bash 处理表达式的最后一步,删除',''
https://www.gnu.org/software/bash/manual/html_node/Shell-Expansions.html |
9
amiwrong123 OP @PTLin
谢谢,这应该就是我想要的官方链接~ |