簡體   English   中英

使用Ubuntu 12.04中的終端無法理解bash中的腳本

[英]script in bash not understood using terminal in Ubuntu 12.04

誰能告訴我該腳本在.sh文件中表示什么意思:

[ ! -n "$T_R" ] && echo "Message Appear" && exit 1;

編輯:更正三位一體指出的錯誤信息

方括號[ ]是'test'的別名,用於測試是否滿足條件。 不會使事情復雜化,但是請注意,這與bash shell關鍵字[[ ]]是離散的(謝謝,請使用Tripleee來清除它!)。 有關更多詳細信息,請參見此帖子。 如今,由於其功能更強大,大多數人似乎都在使用后者。

在方括號之間,腳本正在測試以確定變量"$T_R"是否為空字符串。

  • 如果作為參數傳遞給它的字符串的長度為非空,則-n運算符返回true。
  • ! 反轉大小寫(如果結果為true,則測試成功)。 因此,在這種情況下,如果字符串變量"$T_R"的長度不是"$T_R" (即,如果該變量是空字符串或不存在),則test成功(返回0)。

雙與號&&運算符表示僅在成功的情況下執行后續代碼,因此僅在測試成功的情況下(同樣,如果"$T_R"為空或未設置)將回顯消息“ Message Appear”

最后, && exit 1表示成功回顯Message Appear消息后退出返回狀態1。

bashtest手冊頁在所有這些主題上都非常有幫助,應查閱進一步的詳細信息。

鏈接的&&是常見的短路習慣用法。

而不是寫作

if true; then
  if true; then
    echo moo
  fi
fi

您可以縮寫為true && true && echo moo

echo通常會成功,因此true && echo moo && exit 1如果true成功則將執行echoexit (顯然,它將始終如此)。

(可能在極端的極端情況下, echo可能會失敗,但是如果發生這種情況,無論如何您都會敬酒,所以我認為嘗試防范這種情況是沒有道理的。)

[test的別名,它是shell腳本的常規比較幫助程序(在Bash中,它甚至是內置的)。 test -n檢查字符串是否為非空。

! 是一般的否定運算符,因此它將測試轉換為檢查空字符串。

(這有點單調,因為有一個單獨的test -z "$T_R"專門檢查字符串是否為空。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM