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 $*
?
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 $*
?
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:
@mat dlaczego Google nie znaleźliśmy wszystkie inne duplikaty? – 0x90
@ 0x90: Google nie indeksuje "interpunkcji", tylko słów; spróbuj [symbolhound] (http://symbolhound.com/?q=%24%40+%24%2A) w przypadku takich rzeczy. –