2014-12-18 2 views
1

설정 파일에서로드 된 함수에 변수를 전달하고 있습니다. 이 변수는 차례로 grep에 전달됩니다. 검색 변수 ($ 1)를 확장하는 몇 가지 방법을 시도했지만 아무 것도 작동하지 않는 것처럼 보이지만 검색 할 파일은 잘 작동합니다 ($ 2).변수에 grep이 전달되었습니다.

변수를 grep 함수에 표시하는 올바른 방법은 무엇인지 조언 해 줄 수 있습니까? 나는 "$ {1}", $ 1, $ {1}, "$ {! 1}

UPDATE 답변을 바탕으로, '$ 1' 을 시도 나는 실제 스크립트를 refelect하는 script.sh를 업데이트 여전히 작동하지 않는 복잡성.

감사 예술 RouteTableId

MyVar=$(grep -m 1 "RouteTableId" $2) 
에 대한 변수를 사용하여 코드 작업

RouteTableId

config.file

myTerm="RouteTableId" 
myFile="my.file" 

script.sh에 대한 변수로 코드를 작동하지

. config.file 
myFunction(){ 
    mySubFunction(){   
     myVar=$(grep -m 1 "$1" $2) 
     echo $myVar 
    } 
    mySubFunction ${!1} ${!2} 
} 
myFunction "myTerm" "myFile" 

좀 더 많은 테스트를 수행하고 그 회전 UPDATE fu와 fu 사이에 변수를 전달할 때 몇개의 상황에서는, 순서의 1 개가 null의 경우, 번호 부가 순서가 변경됩니다. 예를 들어 난 다음, 2중인 변수가 NULL로하여 myFunction 부르면

myFunction "myTerm" "blah" "myFile" 

다음 myFunction이 알 것이다

echo "${!1}, ${!2}, ${!3}" 
RouteTableId,,my.file 

따라 다음

mySubFunction ${!1} ${!3} 

로부터 제공 mySubFunction이 지나가는 within mySubFunction

그래서 순서에 null이 제거되고 후속 변수가 숫자 순서로 앞으로 가져 오는 것 같습니다. 누군가가 왜 내가 그것을 고맙게 여기는지를 검증하고 설명 할 수 있다면.

들으 예술

+0

"$ 1" – tinySandy

+1

@Ed, 저에게 탁월한 경력을 쌓을 수있어서 기쁩니다. :) 예, 다른 처리 옵션에서 호출되는 여러 하위 함수가 있습니다. 행복한 페스티 부스! –

+0

@artvanderlay 그런 하위 함수를 사용할 수 있습니까? 100 %는 아니지만 함수에서 함수를 선언 할 수는 없다는 것을 확신 할 수 있습니다. 그렇다고해도 별개의 함수로 선언하는 것이 더 좋을 것이라고 생각합니다. 통화를 다른 통화에 포함하기 만하면됩니다. –

답변

3

당신은 값을 전달하지 않은 변수 만 값으로 변수 이름 자체.

myFunction "myTerm" "myFile" 

이 당신이, 당신이 더 당신이 예상 할 무엇인지 정의하기 위해 질문을 수정해야 기대하지 어떤 경우

myFunction "$myTerm" "$myFile" 
+0

네가 맞았으므로 더 복잡한 것을 반영하기 위해 내 Q를 업데이트했습니다. thx Art –

2

해야한다 :

$ cat my.file 
foo 
Here it is: RouteTableId 
bar 
$ 
$ cat config.file 
myTerm="RouteTableId" 
myFile="my.file" 
$ 
$ cat script.sh 
. config.file 
myFunction() { 
    mySubFunction() { 
     myVar=$(grep -m 1 "$1" "$2") 
     echo "$myVar" 
    } 
    mySubFunction "${!1}" "${!2}" 
} 
myFunction "myTerm" "myFile" 
$ 
$ ./script.sh 
Here it is: RouteTableId 

을 최근부터 업데이트, 무슨 뜻인지 혼란 스럽다고 생각합니다 $1 등. 셸 스크립트에서 어떤 함수도 제외하면 $1은 셸 스크립트에 전달 된 첫 번째 인수입니다. 쉘 스크립트 내의 함수 $1은 그 함수에 전달 된 첫 번째 인수이며, 첫 번째 인수는 쉘 스크립트로 전달되지 않습니다. 당신이 할 그렇다면 : 다음, 쉼표, 다음에 전달 된 제 3 인수 (즉, 또한 함수에 전달 된 첫 번째 인수 이후)

func() { 
    echo "$1,$2,$3" 
} 
func "$1" "$3" 

다음 스크립트에 전달 된 첫 번째 인수의 값을 얻을 것이다 스크립트 (이후 두 번째 arg가 함수로 전달됨)와 다른 쉼표가 있고 그 모두 (함수에 전달 된 세 번째 arg가 없기 때문에)입니다.

희망이 있습니다.

+0

당신의 도움에 감사드립니다. 이전 게시물에 대한 생각을 바탕으로 실제 코드를 훨씬 더 복잡하게 리뷰하기 시작했습니다. 내 결과에 대한 내 업데이트를 볼 수 있습니다. 귀하의 도움을 위해 나는이 축제 기간 동안 사람들을위한 돈 - 인간 기금에 당신의 이름으로 기부했습니다. –

+0

어디에도 소식이 표시되지 않지만 기부 해 주셔서 감사합니다. 그러나 나는 그것을 우표를위한 안전한 접착제로 만드는 방향으로 바꿀 것입니다. –

+0

지금 업데이트되었습니다. 문제가 단순히 변수를 인용하지 않는 것 같습니다. Naughty ....'$ {! 1} '이 아닌''$ {! 1}'''을 사용하십시오. 또한 func "$ 1" "$ 3"을 호출 할 때'func' 안에 두 번째 arg (즉'$ 2')는 호출 코드에서'$ 3'에서 추출한 값이므로 만약 당신이 원하는 것이 아니라면 그렇게하지 마! –

관련 문제