2017-03-12 42 views
0

當我運行此命令慶典在Ubuntu 16:設置-e沒有繼承內殼層

set -e; echo $(echo "$-"); 

我得到himBH作爲輸出。我期待在輸出中包含字母e。這是怎麼回事?

我在Ubuntu 16.04.1 LTS與 GNU的bash,版本46年3月4日(1)-release下(x86_64-PC-Linux的GNU)

+0

'set -e'是... *有爭議的* - 它的行爲在不同的shell版本之間有所不同,通常非常令人驚訝。考慮閱讀[BashFAQ#105](http://mywiki.wooledge.org/BashFAQ/105)。 –

回答

1

命令替換不繼承errexit選項,除非你處於POSIX模式下,或者使用inherit_errexit shell選項(已添加到bash 4.4)。

192% bash -ec 'echo "$(echo "$-")"' 
hBc 
192% bash --posix -ec 'echo "$(echo "$-")"' 
ehBc 
192% bash -O inherit_errexit -ec 'echo "$(echo "$-")"' # 4.4+ 
ehBc