@terdon в этом сообщении ответил на связанный мой вопрос, но я пропустил еще один вопрос в том сообщении.
См. следующие команды:
calc(){ awk "BEGIN{ print $* }" ;}; calc "((3+(2^3)) * 34^2 / 9)-75.89"
Вышеупомянутые команды хорошо работают с расчетным результатом '1337'.
echo '((3+(2^3)) * 34^2 / 9)-75.89' | awk "BEGIN{ print $* }"
Но вышеупомянутые команды не дают результата, в то время как @terdon объяснил хорошо о почему.
Вы могли советовать тому, что заставило первый пример работать с $*?
$*
относится к позиционным параметрам - те переменные, которыми ссылаются $1
и $2
и так далее, и обеспечиваются как аргументы сценариям и функциям. Это - ключ к Вашему вопросу.
Когда у Вас есть интерактивная оболочка, нет никакого позиционного набора параметров по умолчанию, таким образом, $*
пусто. Можно заставить его работать при установке тех, которые через set "((3+(2^3)) * 34^2 / 9)-75.89"
команда, которая сделает $1
равняйтесь той строке.
Различие с calc(){ awk "BEGIN{ print $* }" ;};
это, это - функция, и функции могут обработать позиционные параметры (их, не оболочка). Когда Вы звоните calc "((3+(2^3)) * 34^2 / 9)-75.89"
Вы вызываете функцию с позиционным параметром "((3+(2^3)) * 34^2 / 9)-75.89"
. Там $*
не будет пусто:
$ calc(){ echo "Params: '$*'"; awk "BEGIN{ print $* }" ;}; calc "((3+(2^3)) * 34^2 / 9)-75.89"
Params: '((3+(2^3)) * 34^2 / 9)-75.89'
1337