2017-02-08 59 views
1

iF任何人都可以解釋我下面的代碼意味着什麼(「-z $ {1 + x}」),那麼我會很高興。 我有一部分代碼,我試圖理解它。我知道它用字符串檢查某些東西,但不知道究竟是什麼。bash命令的解釋

if [ -z ${1+x} ]; then 
    error "Please provide some information" 1; 
fi 

Thansk預先

+3

http://explainshell.com/explain?cmd = if +%5B + -z +%24%7B1%2Bx%7D +%5D%3B + then ++++++ error +%22Please + provide + some + information%22 + 1%3B + fi - 懸停在不同部分得到詳細的解釋 – baao

回答

2

[ ]構建體進行測試。如果測試爲「真」,則返回0;如果測試爲「假」,則返回非零值。

-z測試需要一個參數,如果參數是一個空(零長度)字符串,則返回「true」。

如果設置了位置參數1,則「$ {1 + x}」擴展擴展爲給定值(在這種情況下爲x,但您可以放置​​任何您想要的)。如果它已被賦值(即使該值爲空字符串),它將被設置,否則取消設置。如果位置參數未設置,則擴展會生成一個空字符串。

請注意,它也適用於變量名稱。例如,您可以使用「$ {MYVAR + x}」。

如果沒有值作爲參數1傳遞給腳本或函數,則整個if塊將顯示錯誤消息。但是,如果通過了空值(即myscript ""),則不會有錯誤消息。

+0

謝謝,這解釋了一切:) – otemek

1

可能是更好地與爲例進行了說明,

案例-1:foo未設置

unset foo 

if [[ ${foo+isset} = isset ]]; then 
    echo "foo is set..." 
else 
    echo "foo is not set..." 
fi 

運行它產生,

bash -x script.sh 
+ unset foo 
+ [[ '' = isset ]] 
+ echo 'foo is not set...' 
foo is not set... 

案例-2:foo設置和空

$ bash -x script.sh 
+ foo= 
+ [[ isset = isset ]] 
+ echo 'foo is set...' 
foo is set... 

案例3:foo設置並具有有效的值,

$ bash -x script.sh 
+ foo=something 
+ [[ isset = isset ]] 
+ echo 'foo is set...' 
foo is set... 

那麼基本上${paramter+word}確實是

形式擴展到咱這參數沒有設置或者爲空。如果它被設置,它不會擴展到參數的值,而是一些文字,您可以指定:

所以,

if [ -z ${1+x} ]; then 

檢查位置參數$1被設置爲一個值,其中如果它將被分配一個值x並且檢查if [ -z 'x' ]將失敗,但是如果$1爲空,則擴展將爲if [ -z '' ],這意味着test聲明爲真。