Kabuk betiklerinde [email protected]
ve $*
arasındaki fark nedir?
Script argümanlarını almanın tercih edilen yolu hangisidir?
Bu konu hakkında farklı kabuk yorumlayıcıları arasında farklılıklar var mı?
Kabuk betiklerinde [email protected]
ve $*
arasındaki fark nedir?
Script argümanlarını almanın tercih edilen yolu hangisidir?
Bu konu hakkında farklı kabuk yorumlayıcıları arasında farklılıklar var mı?
here Gönderen: argümanlar onları boşluk varsa düzgün kırılır alıntı yaparken
$ @ dışında $ * gibi davranır.
(bağlantılı cevap alınmıştır) örneğin bu senaryoyu ele alalım:
for var in "[email protected]"
do
echo "$var"
done
bu verir:
$ sh test.sh 1 2 '3 4'
1
2
3 4
Şimdi değiştirmek "[email protected]"
$*
için:
for var in $*
do
echo "$var"
done
Ve şunu elde edersin:
$ sh test.sh 1 2 '3 4'
1
2
3
4
her parametre alıntı dize @ $ ile
'" $ * "' başka bir ilginç özelliği vardır. Her argüman bir boşluk yerine '$ IFS 'değeriyle ayrılır. –
Değişikliklerin nasıl genişlediğini (daha sonra komutların neye benzediğini) ve bunun neden farklı sonuçlara yol açtığını açıklamak faydalı olabilir. –
(Google kullanarak bulundu Yanıt). Aksi takdirde aynı davranır.
Bkz: http://tldp.org/LDP/abs/html/internalvariables.html#APPREF
"Alınan bir dize mi"?Bu, "$ @" 'nin kullanılmasının önce bir alıntılanmış dize oluşturduğunu ve daha sonra kabuğun bir sonraki komutu nasıl çalıştıracağına karar verdiğinde ayrıştırdığını ima eder. $ * 'Tarafından dizge bitiştirmenin atlatıldığını söylemek daha doğru olur, çünkü $ *' kullanılmayan dizge-bölme yapılır. Böylece, "$ @" 'kullanımı genellikle yalnızca daha doğru değil, aynı zamanda kabukların yorumlanması için daha az çalışmadır. –
... bu arada irc: //irc.freenode.org/#bash içinde "abs" ifadesini yazmak için - Önemsiz "Advanced" Bash Scripting Guide (Önemsiz "Advanced" Bash Scripting Guide) önbelleğini filtrelemeyi bilmediğiniz sürece kullanılmamalıdır. Senaryoları değil, hataları yazmayı öğretecek. Bu ışıkta, BashGuide yazıldı: http://mywiki.wooledge.org/BashGuide –
benim POV bir anahtar fark "$ @" argümanları asıl sayısını korur olmasıdır. Bu, yalnızca biçimindedir. Bu nedenle, script ile etraftaki geçişleri geçmek için çok kullanışlı olan .
#!/bin/bash
main()
{
echo 'MAIN sees ' $# ' args'
}
main $*
main [email protected]
main "$*"
main "[email protected]"
### end ###
ve böyle çalıştırmak:
Örneğin, dosya my_script içeriyorsa
ANA 5 args
görür: Bu çıktıyı alacakmy_script 'a b c' d e
MAIN, 5 adet hata görüyor
ANA 1 args
ANA görür 3 args
olası yinelenen [Ne "$ @" ve bash "$ *"? Arasındaki fark] (http://stackoverflow.com/questions/3008695 görür/what-the-and-in-bash) – Daenyth