【问题标题】:What is the difference between back ticks and $(command) in bash scripting? [duplicate]bash 脚本中的反引号和 $(command) 有什么区别? [复制]
【发布时间】:2018-09-25 01:16:48
【问题描述】:

我可以从这两种表格中得到相同的结果吗?

例如:

for i in `seq 1 10`
for i in $(seq 1 10)

我从上面两个语句中得到了相同的结果。

【问题讨论】:

    标签: bash


    【解决方案1】:

    两者的区别在于对特殊字符的处理。

    来自手册页:

    命令替换

    命令替换允许命令的输出替换 命令名称。有两种形式:

          $(command)    
    

          `command`
    

    Bash 通过执行命令并替换 用命令的标准输出替换命令,用 删除任何尾随换行符。嵌入式换行符不是 已删除,但在分词过程中可能会被删除。命令 替换 $(cat 文件) 可以替换为等效但 更快的 $(

    当使用旧式反引号形式的替换时,反斜杠 保留其字面意义,除非后面跟着 $、` 或 .这 前面没有反斜杠的第一个反引号终止命令 替代。使用 $(command) 形式时,所有字符之间 括号构成命令;没有人受到特殊对待。

    使用$() 表单,您无需担心转义任何特殊字符。如果您只想放置一个复杂的命令,这会很有帮助。

    当您想在命令中进行任何类型的替换时,反引号形式很有用。

    以下是两者不同时的示例:

    XXX=x1.sh
    
    YYY=`ls -l \$XXX`
    ZZZ=$(ls -l \$XXX)
    
    echo YYY = $YYY
    echo ZZZ = $ZZZ
    

    输出:

    ls: cannot access $XXX: No such file or directory
    YYY = -rwxr-xr-x. 1 dbush dbush 94 Apr 14 23:04 x1.sh
    ZZZ =
    

    【讨论】:

    • 我很好奇“当你想在命令中做任何类型的替换时,反引号的形式很有用。”——你可以嵌套$(...),所以在$(...) 中嵌套反引号有什么特别的好处?我猜你指的是,例如$(sed 's/`stuff/`other/')?
    • 普遍的共识似乎是“应该简单地避免反引号形式;使用新语法。”
    猜你喜欢
    • 2023-03-17
    • 2012-12-18
    • 2015-11-07
    • 2014-05-13
    • 2011-03-26
    • 2018-04-05
    相关资源
    最近更新 更多