2013-03-24 10 views
5

w moim script.sh:

[email protected] 
bb=$* 
echo $aa 
echo $bb 

podczas uruchamiania go:

source script.sh a b c d e f g 

uzyskać:

a b c d e f g 
a b c d e f g 

Jaka jest różnica między [email protected] i $*?

+0

@mat dlaczego Google nie znaleźliśmy wszystkie inne duplikaty? – 0x90

+1

@ 0x90: Google nie indeksuje "interpunkcji", tylko słów; spróbuj [symbolhound] (http://symbolhound.com/?q=%24%40+%24%2A) w przypadku takich rzeczy. –

Odpowiedz

8

Nie ma różnicy między $* i [email protected], ale istnieje różnica między "[email protected]" i "$*".

$ cat 1.sh 
mkdir "$*" 

$ cat 2.sh 
mkdir "[email protected]" 

$ sh 1.sh a "b c" d 

$ ls -l 
total 12 
-rw-r--r-- 1 igor igor 11 mar 24 10:20 1.sh 
-rw-r--r-- 1 igor igor 11 mar 24 10:20 2.sh 
drwxr-xr-x 2 igor igor 4096 mar 24 10:21 a b c d 

Daliśmy trzy argumenty do skryptu (a, b c i d), ale w "$ *" wszystkie one zostały połączone w jeden argument a b c d.

$ sh 2.sh a "b c" d 

$ ls -l 
total 24 
-rw-r--r-- 1 igor igor 11 mar 24 10:20 1.sh 
-rw-r--r-- 1 igor igor 11 mar 24 10:20 2.sh 
drwxr-xr-x 2 igor igor 4096 mar 24 10:21 a 
drwxr-xr-x 2 igor igor 4096 mar 24 10:21 a b c d 
drwxr-xr-x 2 igor igor 4096 mar 24 10:21 b c 
drwxr-xr-x 2 igor igor 4096 mar 24 10:21 d 

Widać tutaj, że "$*" oznacza zawsze jeden pojedynczy argument i "[email protected]" zawiera tyle argumentów, jak skrypt miałem. "$ @" to specjalny token, który oznacza "zawiń każdy indywidualny argument w cudzysłowie". Tak więc a "b c" d staje się (lub raczej pozostaje) "a" "b c" "d" zamiast "a b c d"() lub "a" "b" "c" "d" ([email protected] lub $*).

Również polecam ten piękny odczyt na temat:

http://tldp.org/LDP/abs/html/internalvariables.html#ARGLIST

Powiązane problemy