2013-04-08 6 views
0

Если яКакова цель анализа аргументов функций?

#!/bin/bash 

a=2 
func() { 
    echo $a 
    echo $b 
} 

b=3 
func $b 

затем печатает 2\n3, где я ожидал бы только 3.

Вопрос

Когда Глобалы доступны внутри функции. Какова цель тогда разбирать аргументы для функций в BASH?

+0

Переменные, объявленные вне функции всегда будет глобальным. – devnull

ответ

2

Вы передаете аргументы функции, чтобы они могли работать с различными значениями параметров.

Ваш код не использует переданные аргументы, он использует глобальные переменные. Рассмотрим вместо:

#!/bin/bash 

a=2 
b=3 

func() { 
    echo $1 
} 

func ${a} 
func ${b} 

Урожайность:

2 
3 
3

Bash не работает, как это. Вы не принимали никаких аргументов внутри функции. Вместо этого вы просто инициализировали два глобальных вара, которые вы повторили позже в своей функции.

Для того, чтобы делать то, что вам нужно, вы должны сделать следующее:

#!/bin/bash 

a=2 
func() { 
    # first argument 
    echo $1 
    # second argument 
    echo $2 
} 

b=3 
func $b 
func $a $b 

Выход:

3 

2 
3 
Смежные вопросы