2011-12-29 95 views
19

我必須運行命令,在一個bash腳本中,並且在這個bash腳本中,我必須運行其他命令。我正在運行CentOS。bash for inline命令

我發現2種方法來做到這一點在博客和手冊:使用使用美元符號的蜱或口音焦炭

command `sub command` 

2)

1)和括號

command $(sub command) 

2和哪一個更適合使用?

回答

34

有沒有區別,除了在 「nestability」:

$()是嵌套:

$ echo $(echo "hi" $(echo "there")) 

而``是不是。

+2

從技術上講,它可以嵌套,但它必須在每個級別再次逃脫,並且因此不可維護*和*醜陋*。 – l0b0 2012-03-07 15:41:31

1

$(...)和反引號非常相似。兩者之間的唯一區別是一些特殊字符被替換的細節;該手冊介紹了比我更可以:

當使用替代舊式的反引號的形式,反斜槓其次當$,`,或者只是其字面含義。不帶反斜槓的第一個反引號將終止命令替換。使用$(command)形式時,括號之間的所有字符構成命令;沒有人專門處理。

例如,這使得嵌套$(...)更容易一些。除此之外,沒有什麼區別。

3

其他人指出了語法上的區別(基本上,$()在嵌套和逃逸方面略顯清晰),但沒有人提到我認爲更重要的區別:$()更容易閱讀。它看起來不像單引號(這意味着完全不同),並且開始和結束分隔符不同,從而更容易在視覺上區分其內容。

對於您自己的腳本,這可能不是非常重要;代碼可讀性很好,但功能更重要。但對於任何編寫教程,示例代碼,stackoverflow答案等的人來說,可讀性要重要得多。人們鍵入單引號而不是反引號時,鍵入示例等,然後弄糊塗,當它不能按預期工作。

因此,對於每個人在stackoverflow上寫的例子:請保存您的讀者一些麻煩,並始終使用$()表格。

0

我必須同意戈登的事實,$()是方式更清潔。我掙扎了2個小時編輯我的.bash_profile來添加自制bash完成只發現我應該使用`而不是'。