В чем разница между [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
Ответ 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