İlk durum:
echo $'$foo'
Hangi ekolar $foo( $eko komutumdaki ilk yansıma kaldırılır)
Birincisi $bir komut olarak çalıştırılır. Yankı, argümanlar arasında boşluk gerektirmez, sadece onları alır.
Yani echo $'$foo'komutu çalıştırmak için genişler $(ki bu bir komut değildir, böylece onu yok sayar) ve sonra echo '$foo'. İçindeki herhangi bir şey ''nominal değerde alınır - onu genişletmez ya da hiçbir şey yapmaz. İstediğinizi koyabilirsiniz '' ve hiçbir şey olmuyor.
Eğer değiştirirseniz $ile $$buna işlem kimliğini echos.
İkinci:
echo $"$foo"
Bu echos pwd(yani bash $foodeğişkenim değerine genişler )
Çünkü ""genişlemesini engellemiyor. ""normalde karşılaştırılacak bir değer olmasını sağlamak için kullanılır.
Boş olabilecek bir değişkeniniz varsa (örneğin, bir grepsonuçtan kaynaklanıyorsa), başka bir değer / değişkenle karşılaştırmak istiyorsanız, ilk değişkeni koymanız gerekir "". Bu, hata veren yalnızca boş bir kod bölümü (bash'ın gördüğü gibi) yerine her zaman kontrol edilecek bir karşılaştırma olmasını sağlar.
Son olarak, 3 numara. Bu ilginç.
echo $`$foo`
Bu yankılanırken $~/scripts(ı yazdırmak için beklenen ~/scriptsdeğil $~/scripts)
Çünkü (bu durumda) yankı önce $karakteri yazdırıyor . Bir şeyi ters tırnaklara koymak , değişkenin değerinin bir komut olarak çalıştırılmasına neden olur (bunu bash'ın daha yeni sürümlerinde yapmanın daha iyi yolu $(command))
Böylece ilk o echos $genişlediğinde sonra `$foo`hiç `pwd`çalıştırın ve döner hangi ~/Scripts. Ama $baskıyı daha önce yaptık - yani tüm çıktı $~/Scripts.