2013-10-19 17 views
6

Unix (tcsh) 'de, iki farklı notasyon ile diğer adlarimdaki komut satırı argümanlarını kullanıyorum - $1 ve \!:1.Unix tcsh - komut satırı argümanını kullanan diğer ad = 1 versus !: 1

Ancak bir ortam değişkenine $1 dosyasını kaydetmeye çalışırsam kaydedilmediğini fark ettim. Ancak \!:1 kaydedildi.

alias hear 'setenv x \!:1 && echo $x' 
--> hear that 
that 
--> echo $x 
that 

alias oh 'setenv x $1 && echo $x' 
--> oh no 
no 
--> echo $x 

Değeri kaydetmek için 1 $ kullanıldığında $ x'in ekosunda hiçbir şey görünmez. Bunun nedeni nedir?

cevap

14

$1alias komutu içeren komut için geçirilen ilk argüman döndürür. Yani onu komut satırından çağırıyorsanız, hiçbir şey geri dönmeyecektir.

\!:1, iletilen ilk bağımsız değişkeni, diğer adı verilen komutla döndürür; bu nedenle, kullanmanız gereken açıkça budur.

5

supergra birincil noktayı yanıtladı, ancak değişken ayarlanmamış olsa bile metninizin neden tekrar yankılandığını görmenizi bekleyebilir. Yani, diğer adın sonunda echo $x var, ve oh no girdiğinizde, no görüyorsunuz, ancak bu, eko değişkenini yankıladığı anlamına gelmez. Orada neler oluyor

echo (boş) değişken yazdırıyor, ancak daha sonra echo da "hayır" bölümünü ayrı yakalamak olmasıdır. alias tmp 'echo $1' yaparsanız ve tmp hi'u deneyerseniz "hi" yazdıracaksınız, çünkü "echo $ 1 hi" yazıyormuşsunuz gibi.

Bunu daha net görmek için, alias tmp 'echo abc $1 def ''u tekrar deneyin ve tmp hi'u tekrar yapın ve "abc def hi" yazdıracaksınız. Yine, alias tmp 'echo $1 & which ''u deneyin ve tekrar kullanmanız gerekiyorsa, hi adlı bir komutunuz yoksa, "merhaba: Komut bulunamadı." Gibi bir şeye bakın. veya tmp ls yaparsanız which ls çıktısını görürsünüz.

Bir örnek daha: aslında sen bunu bekliyor olmasaydı tehlikeli olabilir bir komut, sanki hi yürütmeye çalıştığı görmek alias tmp 'echo $1 & ' ve tmp hi deneyin.

+0

Tuhaf bir şekilde, kabul edilen cevabı okuduktan sonra bu soruyu aldım. –