2017-02-13 66 views
0

我們有一個帶有返回代碼的腳本。例如bash將管道中的返回值轉換爲bash

#!/bin/bash 
exit 42 

這是正常工作:

$ ./script ; echo $? 
42 

,但如果我去:

$ bash << EOF 
./script ; echo $? 
EOF 
0 

所以它打印0,而一個希望它仍然打印42

+1

你在這裏沒有任何管道,你使用bash來處理heredoc –

回答

6

在執行腳本之前,您的$?正在展開。如果你不希望你的變量在heredoc(不是管)擴大放單引號括起來的名稱:

bash <<'EOF' 
./script; echo $? 
EOF 

那西港島線防止$?從在經過串到新bash命令正在擴大。相反,它將在字符串中進行評估,這是您似乎要做的。