有两种方法可以捕获bash中的命令行输出:

  • 旧版Bourne shell反引号``:
    var=`command`
    
  • $()语法(据我所知,它是特定于Bash的,或者至少不受诸如原始Bourne之类的非POSIX旧shell支持)
    var=$(command)
    

  • 与反引号相比,使用第二种语法有什么好处?还是两个完全等于100%?

    最佳答案

    最主要的功能是能够将它们嵌套在命令中,而不会失去理智地试图找出某种形式的转义是否可以在反引号上起作用的能力。

    一个例子,尽管有些人为的:

    deps=$(find /dir -name $(ls -1tr 201112[0-9][0-9]*.txt | tail -1l) -print)
    

    这将为您提供/dir目录树中所有与2011年12月(a)最早的日期文本文件同名的文件的列表。

    另一个例子是获取父目录的名称(而不是完整路径):
    pax> cd /home/pax/xyzzy/plugh
    pax> parent=$(basename $(dirname $PWD))
    pax> echo $parent
    xyzzy
    

    (a)既然特定命令可能实际上不起作用,我还没有测试该功能。因此,如果您不赞成我,那么您就看不到它的意图了:-)这只是为了说明如何嵌套,而不是将其作为无错误的可立即投入生产的代码段。

    关于bash - 在 shell 程序脚本中使用$()代替反引号有什么好处?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9449778/

    10-11 16:27