2010-10-07 15 views

cevap

8

:- aslında $1 (komut ilk argüman) ayarlamak veya değilse null sonra $DIR değeri olarak /tmp kullandığını söylüyor bir operatör olduğunu ve atamak ayarlanmış eğer $DIR için değerdir.

$ echo ${HOME:-/tmp} # since $HOME is set it will be displayed. 
/home/codaddict 
$ unset HOME # unset $HOME. 
$ echo ${HOME:-/tmp} # since $HOME is not set, /tmp will be displayed. 
/tmp 
$ 
+0

Netleştirdiğiniz için teşekkür ederiz. Yığın taşması çok hızlı :) – user469083

+1

İlk olarak, Gumbo'nun cevabında söylediği gibi, ': -' yalnızca değişken olmayan değişkenler için değil, aynı zamanda boş bir dizgiye genişleyen değişkenler için de hesaplar. Yalnızca set/unset değişkeni için test etmek için '-' (kolonsuz) kullanın. İkincisi, kodunuz DIR ile yanlıştır, çünkü '$ 1' değişkenini belirtmediniz. Sonuç olarak, birden çok alana genişlerse, bir hata oluşur. –

8

Yani sözdizimi parameter expansion geçerli::

${parameter:-word} 
DIR=${1:-"/tmp"} 

Herhangi değişkenlerin sadece pozisyonel parametreler ile kullanılabilir

if [ -z $1 ]; then 
     DIR='/tmp' 
else 
     DIR="$1" 
fi 

kısaltmasıdır

parameter sıfırlanmışsa veya sıfır ise, word genişlemesinin yerine kullanılır. Aksi halde, parameter'un değeri değiştirilir.

Yani $1 ayarlanmazsa veya boş ise, bu "/tmp" ve aksi $1 değerine değerlendirir.

+1

Yararlı link için teşekkürler. – user469083