Genellikle, $0bir komut dosyasında komut dosyasının adına veya ne olarak çağrıldığına (yol dahil) ayarlanır. Ancak, seçeneği bashile kullanırsanız , komut dizesinden sonra iletilen bağımsız değişkenlerin ilkine ayarlanır:-c$0
bash -c 'echo $0 ' foo bar
# foo
Aslında, konumsal parametreler değişmiş gibi görünüyor, ancak dahil $0. Ancak shiftkomut dizesinde $0(normal olarak) etkilenmez :
bash -c 'echo $0; shift; echo $0 ' foo bar
# foo
# foo
Neden bu komut dizeleri için garip davranış? Bu tür garip davranışların arkasındaki nedeni, mantığı arıyorum.
Böyle bir komut dizesinin $0genellikle tanımlandığı gibi parametreye ihtiyaç duymayacağı düşünülebilir , bu nedenle ekonomi için normal argümanlar için de kullanılır. Ancak, bu durumda davranışı shifttuhaftır. Başka bir olasılık, $0programların davranışını tanımlamak için kullanılır (la olarak bashadlandırılır shveya olarak vimadlandırılır vi), ancak bu olamaz, çünkü $0burada yalnızca komut dizesinde görülür ve içinde programlanan programlar tarafından görülmez. Bunun için başka bir kullanım düşünemiyorum $0, bu yüzden bunu açıklamak için bir kaybım var.
echo 'echo the other side of this pipe globs "$@"' | sh -s -- *, ama, ne yazık ki, $0genellikle bir ayarlanabilir parametre değildir -sTeam, seçenek ... Aynı yollardan birçok kullanılabilir xargsgenellikle şeyim. Ve diğerleri dışında.
--, o zaman bu, diğer bazı programlarda görülen 'buradan argümanları başlatır' olağan yorumuna sahip olabilirdi. Sonra tekrar, bu aşina olmayanların aslında bu yoruma sahip olduklarını -cdüşünmek kafa karıştırıcı olabilir --.
-için$0olduğu gibi bir deyim olarak argümansh -c 'foo $1 $2' - a b. Bu şekilde oldukça normal görünüyor (bunun ne-anlama geldiğini