2013-06-22 13 views
9
$ bash -c 'echo "0 is $0 1 is $1"' abc def 
0 is abc 1 is def 

$ echo 'echo "0 is $0 1 is $1"' > bashtest 

$ bash bashtest abc def 
0 is bashtest 1 is abc 

ikinci çalışma eşdeğerdir ...

Temelde abc'nin neden her zaman değil $1 olduğunu merak ediyorum. bash -c ile çalıştırıldığında $0 olur.

cevap

10

Ayrıca bunu bilmiyordum. Ama man page o bahseder:

-c dize: -c seçeneği varsa, o zaman komutlar dize okunur. Dizeden sonra argümanlar varsa, 0 ile başlayan konum parametreleri için atanır.

ARGUMENTS bölüm daha da detaylı bir açıklaması var

:

argümanları seçenek işlemlerinden kalırsa

ARGÜMANLAR ve ne -c ne de -s seçenekleri verilmişse, ilk argümanın, kabuk komutlarını içeren bir dosyanın adı olduğu varsayılır. Bash bu şekilde çağrılır ise, $ 0 dosyanın adı olarak ayarlanır ve konumsal; Parametre ters kalan argümanlar ayarlanır. Bash, bu dosyadan com‐ mands okur ve çalıştırır, sonra çıkar. Bash çıkış durumu, komut dosyasında yürütülen son komutun tus çıkışından oluşur. Hiçbir komutlar yürütüldüğünde ise hiçbir dosya bulunursa, çıkış durumu, bir girişimde ilk geçerli dizinde dosyayı açmak için yapılır 0. ve ardından komut dosyası için PATH dizinleri arar kabuğu.

+0

Makul, sanırım. "0 $" olarak ayarlanacak iyi bir öğeye sahip olmadıkları kesin. Sadece mangaya bakmalıydım; utanıyor bana. Düzenleme için –

+0

@janos Thx! Bu gerçekten sportmenlik! – hek2mgl

+0

@janos Gerçekten güzel bir yazı. :) Yorum yapmak istiyorum. Sahip olduğum tek hesap, şu ana kadar "google +". İsimsiz yorumlara izin veremez misiniz? Not bir süre için AFK olacak ama daha sonra buraya geri dönün .... – hek2mgl