İlk bariz şey [, testveya [[:
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}"2ofset 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)