V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
amiwrong123
V2EX  ›  问与答

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

  •  
  •   amiwrong123 · 4 天前 · 782 次点击
    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:当然我也会先看看中文博客讲解,后面需要查询特定技巧时 可能再来看这种官方链接)

    9 条回复    2024-09-30 20:32:46 +08:00
    ysc3839
        1
    ysc3839  
       4 天前 via Android
    是 shell 解析。
    Unix 传递给程序的参数,是多个字符串,由 shell 解析单个字符串。

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

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

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

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

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

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

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

    确实你这个写法好得多,学习了。
    PTLin
        8
    PTLin  
       4 天前
    翻了下 gnu 的 bash 文档,这个行为应该叫 quote remove ,是 bash 处理表达式的最后一步,删除',''
    https://www.gnu.org/software/bash/manual/html_node/Shell-Expansions.html
    amiwrong123
        9
    amiwrong123  
    OP
       4 天前
    @PTLin
    谢谢,这应该就是我想要的官方链接~
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1967 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 07:26 · PVG 15:26 · LAX 00:26 · JFK 03:26
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.