Bash

我怎樣才能呼應的價值4-gt34−G噸34 -gt 3,那是 bash 中的測試表達式?

  • March 24, 2019

我怎樣才能呼應的價值

$$ 5 -gt 4 $$ ,那是 bash 中的測試表達式?

[ 5 -gt 4 ] | echo

echo `[ 5 -gt 4 ]`

最終都列印了一個空行

@Thomas Dickey 的答案有效,但有人可以解釋為什麼上述兩個不起作用嗎?

您的命令不會按照您期望的方式工作,因為測試不會將任何內容輸出到其標準輸出流。它是標準輸出流,通過管道傳送到管道中的下一個命令(您的第一個命令),它是替換命令替換(您的第二個命令)的標準輸出。

順便說一句,請注意,即使您的第一個管道的左側在其標準輸出流echo上產生了某些內容,右側也不會顯示它。該echo實用程序不會從其標準輸入中讀取(但例如cat會)。


任何 shell 命令都會返回退出狀態。該退出狀態是例如if語句作用的狀態。退出狀態永遠不會輸出到例如終端,否則會干擾命令或腳本的實際輸出。

當你使用

[ 3 -gt 4 ]

[您使用一些參數呼叫該實用程序。該實用程序返回退出狀態。它完全等同於

test 3 -gt 4

參見man testand man [(或help testbashshell 中)。

最近執行的命令的退出狀態儲存在特殊變數$?中。

您可以將其保存在普通變數中,或將其輸出到終端:

[ 3 -gt 4 ]
printf 'Exit status of test was %s\n' "$?"
printf 'Exit status of printf was %s\n' "$?"

請注意,它printf 也會產生自己的退出狀態,因此如果printf呼叫正常,則$?在輸出測試狀態後該值將為零。

上面的程式碼可能會輸出

Exit status of test was 1
Exit status of printf was 0

請注意,測試本身從不在這裡輸出任何內容。它只是提供退出狀態。

引用自:https://unix.stackexchange.com/questions/508295