今天在看 spark 的指令碼的時候,發現很多變數都有用到這種格式,如下:
...
......
&& if ! [ -z $ ]; then spark_classpath="$spark_mounted_classpath:$spark_classpath"; fi
......
...
-z
很容易理解,在 shell 指令碼裡就是表示後面這個變數是否為空,也做zero
的意思。那後面的+x
呢?
以下例子是先定義了variable
變數為空,然後判斷為空的時候輸出需要設定環境變數,不為空則列印變數值。
variable=
if ! [ -z $ ]; then
echo "$ was defined"
else
echo "need to set environment var $variable" && exit 1;
fi
顯示結果如下。結果判斷是正確的。
➜ /tmp cat x.sh
variable=
if ! [ -z $ ]; then
echo "$ was defined"
else
echo "need to set environment var $variable" && exit 1;
fi➜ /tmp ./x.sh
need to set environment var
然後對指令碼略加修改,也就是$
。執行後發現,結果有點詭異,明明變數是空的,為什麼會報告說變數定義了呢?
➜ /tmp cat x.sh
variable=
if ! [ -z $ ]; then
echo "$ was defined"
else
echo "need to set environment var $variable" && exit 1;
fi➜ /tmp ./x.sh
was defined
關於以上的區別,我在 stackoverflow 上找到關鍵的參考資訊。
從上面的回答中可以找到相關的文件。
我大概解釋一下,$
這種稱為 parameter expansion,這個變數的含義是,如果variable
是 unset 或者空的,則會用x
來替換這個值,最後再用剛剛的例子測試一下。
➜ /tmp cat x.sh
variable=
if ! [ -z $ ]; then
echo "$ was defined"
else
echo "need to set environment var $variable" && exit 1;
fi➜ /tmp ./x.sh
x was defined
可以看到variable
為空值null
,所以會用x
來替換$=x
,所以最終會輸出x
的值。 PHP如何判斷變數為空?
php如何判斷變數為空?這看似很簡單的問題,其實不小心就很容易出錯!一般我們判斷變數為空常用的函式如下 empty var 檢查乙個變數是否為空。如果 var 是非空或非零的值,則empty 返回false。換句話說,0 0 null false array var var 以及沒有任何屬性的物件都...
PHP判斷變數為空
1 isset 功能 判斷變數是否被初始化 2 empty 功能 檢測變數是否為 空 3 var null 功能 判斷變數是否為 空 4 var null 功能 檢測變數是否為 null 同時變數的型別也必須是 null 5 is null 功能 檢測變數是否為 null 測試結果 值isset e...
js判斷為空
下面就是有關判斷為空的簡寫方法。如下 if variable1 null variable1 undefined variable1 上面的意思是說如果variable1不是乙個空物件,或者未定義,或者不等於空字串,那麼宣告乙個variable2變數,將variable1賦給variable2。也就...