Bash

2015-08-26 37 views
5

içinde "$ *` an `$ @` arasındaki fark nedir? Her zaman bash işlevinin tüm argümanlarını istediğimde [email protected] kullanıyorum ama yakın zamanda $*'un da aynı şekilde çalıştığını gördüm ve aynı zamanda dizi dizini.Bash

Sorum $* Bash bir [email protected] arasındaki fark nedir nedir? ve hangisini tercih etmeliyim?

+0

Bkz. Http://pubs.opengroup.org/onlinepubs/009695399/utilities/xcu_chap02.html#tag_02_05_02 – Jubobs

+1

Farkı görmek için, boşluk içeren bir argüman kullanmayı deneyin, örn .: 'myscript.sh" abc "d' . –

cevap

7

Bash manual bu konuda oldukça net:

  • $*

    konumsal parametrelerin tümü, tek bir kelime olarak görülmektedir.

    Not

    : $* tırnak içinde olmalıdır.

  • [email protected]

    $* aynı

    , ancak her parametre alıntı dize, yani parametreler yorumlanması veya genişleme olmadan, bozulmamış üzerine intikal eder. Bu, diğer şeylerin yanı sıra argüman listesindeki her parametrenin ayrı bir kelime olarak görüldüğü anlamına gelir.

    Not: Tabii, [email protected] alıntı edilmelidir.

+0

$ 1', '$ 2' ... hakkında ne dersiniz? onlara da alıntı yapmalı mıyım? – fronthem

+0

@ terces907 ideal olarak, evet. Ancak, her bir argümanın IFS'nizden karakter içermediğinden emin olmanız durumunda, yapmanız gerekmez. Bir yan not 'echo $ *' ve 'herhangi tırnak olmadan – Aserre

+0

görün eşdeğerdir' @ $ echo gibi ileri http://stackoverflow.com/questions/10067266/when-to-wrap-quotes-around-a-variable – tripleee

2

burada tarihsel bir gelişme var. $*'un yetersiz olduğu görülmüştür ve bunun yerine [email protected] değiştirilmiştir. $*'un yararlı olduğu durumlar var; ama alıntılanmış simgeleri kırmak istemediğiniz sürece, bundan kaçınmalısınız.