IFS değişkeni, kabuk sözcük bölme adı verilen bir görevi her gerçekleştirdiğinde kullanılır . Bunun kullanıldığı en yaygın durumlar, bir $varkomutta parametre genişletme (örn. ) Veya komut değiştirme (örn. $(some-command)Veya kullanımdan kaldırılmış ters tırnaklar) sonrasındadır. Burada genişletme herhangi bir IFSkarakter içeriyorsa , komut işlenmeden önce farklı 'kelimelere' bölünür. Etkili bir şekilde bu, bu karakterlerin değiştirilen metni farklı argümanlara böldüğü anlamına gelir (değişken ilk önce belirtilirse komutun adı dahil).
Bu nedenle, IFSboşluk, sekme ve yeni satır olmanın varsayılan değerinin nedeni , bunların normalde bir kelimeyi bölmesi beklenen boşluk karakterleri olmasıdır.
Sözcük ayrımının olmasını önlemenin bir yolu, genişletme ( "$var") etrafında çift tırnak kullanmaktır - aslında bunu sorunuzda yapmışsınızdır. Bunu yapmadıysanız echo, hiçbir argümanı olmayacağı için herhangi bir çıktı olmayacaktır, sadece argümanları bölen karakterler.
Sözcük bölme iki yerde de unutmayın gelmez parametre genişleme sonrasında meydana değişken atama ile (örneğin var=$othervarve var=$(somecommand)ok) ve içindeki [[ ]]yapının ( [[ $var = $othervar ]]Tamam, ama [ $var = $othervar ]alıntı olmalıdır).
Son olarak, bilge bir adamın bana bir kez işaret ettiği gibi, yaygın bir yanlış anlama, bir değişkenin alıntılanmasının tek sebebinin kelime bölünmesinin önlenmesidir . Alıntılama , daha yaygın olarak bilindiği için yol adı genişletmesini veya glob genişlemesini de engeller . Bir değişken gibi glob karakterleri içeriyorsa *, değişken bir komutta sıralanmamış olarak kullanıldığında bunlar dosya adlarına genişletilebilir. Örneğin:
var=*
echo $var
Bu, geçerli dizindeki dosyaların adlarını görüntüler.
As Stephane aşağıda işaret , içindeki karakterlerin sırası IFSgenişletirken anlamlıdır "$*". Gönderen bashadam sayfası:
"$*" is equivalent to "$1c$2c...", where c is the first character of the value of
the IFS variable. If IFS is unset, the parameters are separated by spaces. If
IFS is null, the parameters are joined without intervening separators.
Sözcük ayırmaya ilişkin daha fazla örnek için lütfen bu yanıta bakın - https://unix.stackexchange.com/a/118444/48083
$IFSde kullanılır,"$*"bu yüzden sipariş önemlidir.