bash 스크립트에서 매개 변수를 전달하는 방법은 무엇입니까?


14

다양한 변수가있는 스크립트에서 호출 할 수있는 함수를 작성하고 싶습니다. 어떤 이유로 나는 이것을하는 데 많은 어려움을 겪고 있습니다. 예제 나는 항상 전역 변수를 사용하지만 읽을 수있는 한 코드를 더 읽기 쉽게 만들지는 않습니다.

사용 예 :

#!/bin/bash
#myscript.sh
var1=$1
var2=$2
var3=$3
var4=$4

add(){
result=$para1 + $para2
}

add $var1 $var2
add $var3 $var4
# end of the script

./myscript.sh 1 2 3 4

나는 $1함수에서 등을 사용하려고 시도했지만 전체 스크립트가 호출 된 전역 스크립트를 사용합니다. 기본적으로 내가 무엇을 찾고있어 같은 것입니다 $1, $2등등하지만, 함수의 로컬 컨텍스트에서. 아시다시피, 함수는 적절한 언어로 작동합니다.


예제에서 $ 1과 $ 2를 사용하면 "works"함수가 추가됩니다. 시도 echo $1echo $2그것입니다.
Wieland

내 예제는 끔찍하게 불완전했습니다. 이제는 더 이상 작동하지 않습니다.
user181822

당신의 교체 result = result=$(($1 + $2))하고 추가 echo $result뒤에 그리고 $ 1과 $ 2 사용자의 기능을 인수하고, 올바르게 작동합니다.
Wieland

답변:


18

인수가있는 함수를 호출하려면

function_name "$arg1" "$arg2"

이 함수는 이름이 아닌 위치에 따라 전달 된 인수, 즉 $ 1, $ 2 등을 나타냅니다. $ 0은 스크립트 자체의 이름입니다.

예:

#!/bin/bash

add() {
    result=$(($1 + $2))
    echo "Result is: $result"
}

add 1 2

산출

./script.sh
 Result is: 3

2
나는 지금 나의 실수를 깨닫는다. 함수에서 $ 0과 $ 1을 사용했고 실제로 $ 0은 스크립트 이름으로 확인되었습니다. 함수 자체가 아닌 스크립트 매개 변수로 오인했습니다. 감사합니다!
user181822

6

기본 스크립트에서 $ 1, $ 2는 이미 알고있는 변수를 나타냅니다. 아래 첨자 또는 함수에서 $ 1 및 $ 2는이 첨자에 대한 내부 (로컬) 변수로 함수에 전달 된 매개 변수를 나타냅니다.

#!/bin/bash
#myscript.sh
var1=$1
var2=$2
var3=$3
var4=$4

add(){
  #Note the $1 and $2 variables here are not the same of the
  #main script... 
  echo "The first argument to this function is $1"
  echo "The second argument to this function is $2"
  result=$(($1+$2))
  echo $result

}

add $var1 $var2
add $var3 $var4
# end of the script


./myscript.sh 1 2 3 4
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.