Bir Bash komut dosyasını anlamaya çalışıyorum. Bunun üzerine tökezledim:Bash parametre genişletmesi nasıl çalışır?
DIR=${1:-"/tmp"}
Bu ne anlama geliyor?
Bir Bash komut dosyasını anlamaya çalışıyorum. Bunun üzerine tökezledim:Bash parametre genişletmesi nasıl çalışır?
DIR=${1:-"/tmp"}
Bu ne anlama geliyor?
:-
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
$
Yani sözdizimi parameter expansion geçerli::
${parameter:-word}
Herhangi değişkenlerin sadece pozisyonel parametreler ile kullanılabilirDIR=${1:-"/tmp"}
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.
Yararlı link için teşekkürler. – user469083
Netleştirdiğiniz için teşekkür ederiz. Yığın taşması çok hızlı :) – user469083
İ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. –