[email protected]и $* в сценариях оболочки? - программирование" />

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