В чем разница между [email protected]и $* в сценариях оболочки?
В сценариях оболочки в чем разница между [email protected]
и $*
?
Какой из них является предпочтительным способом получения аргументов script?
Существуют ли различия между интерпретаторами интерпретаторов оболочки?
Ответы
Ответ 1
Из здесь:
[email protected]ведет себя как $*, за исключением того, что при цитировании аргументы разбиваются правильно, если в них есть пробелы.
Возьмите этот script, например (взятый из связанного ответа):
for var in "[email protected]"
do
echo "$var"
done
Дает следующее:
$ sh test.sh 1 2 '3 4'
1
2
3 4
Теперь измените "[email protected]"
на $*
:
for var in $*
do
echo "$var"
done
И вы получите следующее:
$ sh test.sh 1 2 '3 4'
1
2
3
4
(Ответ найден с помощью Google)
Ответ 2
Ключевое отличие от моего POV заключается в том, что "$ @" сохраняет исходный номер
аргументов. Это единственная форма, которая делает. По этой причине это
очень удобно для передачи args с помощью script.
Например, если файл my_script содержит:
#!/bin/bash
main()
{
echo 'MAIN sees ' $# ' args'
}
main $*
main [email protected]
main "$*"
main "[email protected]"
### end ###
и я запускаю его следующим образом:
my_script 'a b c' d e
Я получу этот вывод:
MAIN видит 5 аргументов
MAIN видит 5 аргументов
MAIN видит 1 аргументы
MAIN видит 3 аргумента
Ответ 3
С [email protected]каждый параметр является кавычкой строки. В противном случае он ведет себя одинаково.
Смотрите: http://tldp.org/LDP/abs/html/internalvariables.html#APPREF