第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在shell腳本中使用$()而不是backticks有什么好處?

在shell腳本中使用$()而不是backticks有什么好處?

元芳怎么了 2019-07-05 14:41:25
在shell腳本中使用$()而不是backticks有什么好處?中有兩種方法可以捕獲命令行的輸出。bash:遺留的Bourne殼背板``: var=`command`$()語法(據(jù)我所知,這是特定于Bash的,或者至少不受原始Bourne那樣的非POSIX舊shell的支持) var=$(command)與Backticks相比,使用第二種語法有什么好處嗎?還是兩者完全等同?
查看完整描述

4 回答

?
繁華開滿天機

TA貢獻1816條經(jīng)驗 獲得超4個贊

最重要的是它們是命令中的命令,而不是失去理智,試圖找出某種形式的轉義是否會在后臺工作。

舉個例子,雖然有些人為的:

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)現(xiàn)在專一命令可能實際上不起作用,我還沒有測試它的功能。所以,如果你對我投反對票,你就會忘記它的意圖:-)這僅僅是為了說明你可以如何筑巢,而不是作為一個沒有bug的現(xiàn)成的片段


查看完整回答
反對 回復 2019-07-05
?
開滿天機

TA貢獻1786條經(jīng)驗 獲得超13個贊

假設您希望找到對應于何處的lib目錄gcc已經(jīng)安裝好了。你可以選擇:

libdir=$(dirname $(dirname $(which gcc)))/lib

libdir=`dirname \`dirname \\\`which gcc\\\`\``/lib

第一種比第二種更容易-使用第一種。


查看完整回答
反對 回復 2019-07-05
?
一只甜甜圈

TA貢獻1836條經(jīng)驗 獲得超5個贊

后排(`...`)是最古老的非POSIX兼容Bourne-shell和$(...)是否有POSIX和更多的優(yōu)先考慮,原因如下:

  • 反斜杠(\)內(nèi)背以一種不明顯的方式處理:

    $ echo "`echo \\a`" "$(echo \\a)"a \a
    $ echo "`echo \\\\a`" "$(echo \\\\a)"\a \\a# Note that this is true for *single quotes* too!
    $ foo=`echo '\\'`; bar=$(echo '\\'); 
    echo "foo is $foo, bar is $bar" foo is \, bar is \\
  • 嵌套引用$()要方便得多:

    echo "x is $(sed ... <<<"$y")"

    而不是:

    echo "x is `sed ... <<<\"$y\"`"

    或者寫這樣的東西:

    IPs_inna_string=`awk "/\`cat /etc/myname\`/"'{print $1}' /etc/hosts`

    因為$()使用全新的上下文引用

    這是不可移植的,因為伯恩和科恩外殼將需要這些反斜杠,而巴什和破折號不需要。

  • 嵌套命令替換的語法更容易:

    x=$(grep "$(dirname "$path")" file)

    超過:

    x=`grep "\`dirname \"$path\"\`" file`

    因為$()強制執(zhí)行一個全新的引用上下文,因此每個命令替換都受到保護,并且可以單獨處理,而不需要特別關注引用和轉義。當使用背面,它變得越來越丑后,兩個以上的水平。

    很少有更多的例子:

    echo `echo `ls``      # INCORRECTecho `echo \`ls\``    # CORRECTecho $(echo $(ls))    # CORRECT
  • 它解決了使用反引號時行為不一致的問題:

    • echo '\$x'

      產(chǎn)出

      \$x

    • echo `echo '\$x'`

      產(chǎn)出

      $x

    • echo $(echo '\$x')

      產(chǎn)出

      \$x

  • Backticks語法對嵌入命令的內(nèi)容有歷史限制,不能處理一些包含反引號的有效腳本,而較新的$()表單可以處理任何類型的有效嵌入式腳本。

    例如,這些其他有效的嵌入式腳本不在左列中工作,而是在右側工作。IEEE:

    echo `                         echo $(
    cat <<\eof                     cat <<\eof
    a here-doc with `              a here-doc with )eof                            eof`           
    
    
    echo `                         echo $(echo abc # a comment with `   
     echo abc # a comment with )`         
    
    
    echo `                         echo $(echo '`'                       echo ')'`

因此,$-前綴命令替換應該是首選的方法,因為它具有清晰的語法(提高了人和機器的可讀性),它是不可見的和直觀的,它的內(nèi)部解析是分開的,而且它也更一致(與從雙引號中解析的所有其他擴展),其中Backticks是唯一的例外和`字符相鄰時很容易偽裝。"使它更難讀,特別是用小字體或不尋常的字體。

資料來源:為什么$(...)優(yōu)先于`...`(后排)?在BashFAQ

另見:


查看完整回答
反對 回復 2019-07-05
?
桃花長相依

TA貢獻1860條經(jīng)驗 獲得超8個贊

        $(command)
   or          `command`

   Bash performs the expansion by executing command and replacing the com-
   mand  substitution  with  the  standard output of the command, with any
   trailing newlines deleted.  Embedded newlines are not deleted, but they
   may  be  removed during word splitting.  The command substitution $(cat
   file) can be replaced by the equivalent but faster $(< file).

   When the old-style backquote form of substitution  is  used,  backslash
   retains  its  literal  meaning except when followed by $, `, or \.  The
   first backquote not preceded by a backslash terminates the command sub-
   stitution.   When using the $(command) form, all characters between the
   parentheses make up the command; none are treated specially.


查看完整回答
反對 回復 2019-07-05
  • 4 回答
  • 0 關注
  • 843 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號