İlk bariz şey [
, test
veya [[
:
if [ "$1" = 1 ];
Bash'deyken, [[ ]]
sözcük bölme ve yol adı genişletme gibi koşullu ifade için gereksiz şeyler yapmadığı için kullanılması önerilir. Çift tırnak işaretleri arasında alıntı yapmak da gerekli değildir. Daha okunabilir bir operatör ==
de kullanılabilir.
if [[ $1 == 1 ]];
Eklenen not: İkinci işlenen da değişkenler içeriyorsa o gibi tanınabilir karakterler içeriyorsa desen eşleştirme tabi olabilir gibi alıntı gereklidir *
, ?
, []
, .. Eğer globbing genişletilmiş veya desen eşleştirme ile etkindir vb shopt -s extglob
, diğer formları gibi @()
, !()
vb desen olarak da kabul edilecektir. Bkz. Örüntü Eşleme .
Gibi operatörler ile <
ve >
hala bir kez ikinci argüman alıntı değil farklı sonuçlara neden bir hata ile karşılaşmış gibi gerekli olabilir.
İlk işlenen için hiçbir şey geçerli değildir.
Bu daha basit varyasyonu da düşünün:
case "$1" in
1)
mv -- "${@:2}" ~/lab/Sun
;;
2)
mv -- "${@:2}" ~/lab/Moon
;;
3)
mv -- "${@:2}" ~/lab/Earth
;;
esac
Veya yoğunlaştırılmış:
case "$1" in
1) mv -- "${@:2}" ~/lab/Sun ;;
2) mv -- "${@:2}" ~/lab/Moon ;;
3) mv -- "${@:2}" ~/lab/Earth ;;
esac
"${@:2}"
2
ofset olan bir alt dize genişletme veya dizi üyesi genişletme biçimidir . Bu, genişlemeyi ikinci değerden başlatır. Bununla kullanmamız gerekmeyebilir shift
.
Eklenen , tire ( ) ile başlayan dosya adlarının geçersiz seçenekler olarak tanınmasını --
önler .mv
-
$var
$(cmd)
`cmd`
$(cmd)