2017-12-22 2 views
0

인수를 전달 : 여기 함수 호출 결과 플래그와 내가 같이 현재 스크립트를 업데이 트하려는

$ example.sh a b 

는 인수에 소요 example.sh

for var in "[email protected]" 
do 
    $var 
done 

내 코드입니다 이러한 인수는 반복되고 실행됩니다 (이러한 인수가 있다고 가정 할 때).

flags이 scripts/functions이고 그 이후의 모든 내용이 함수의 인수로 적용되도록 스크립트를 업데이트하고 싶습니다.

$ example.sh --a 1 2 3 --b 4 5 6 

모든 플래그를 반복하고 이에 해당하는 항목을 실행하고 싶습니다.

a 1 2 3 
b 1 2 3 

나는 getopts로 보았다하지만 그것은 나를 실행하고 인수에 내가하고 싶은 길을 통과 할 수 있는지 확실하지 않다.

내가 뭘하려 :

while getopts ":a:b:c:d:" opt; do 
    case "$opt" in 
    a) i=$OPTARG ;; 
    b) j=$OPTARG ;; 
    c) k=$OPTARG ;; 
    d) l=$OPTARG ;; 
    esac 
done 

echo $i 
echo $j 

for file in "[email protected]"; do 
    echo $file 
done 

나는 example --a 1 2 3 --b 4 5 6OPTARG를 사용하여 첫 번째 항목을 지정하고이 제대로 작동하지 않습니다 주어진 다음 스크립트를 발견했다. 이 형식으로 함수에 인수를 적용하는 방법을 잘 모르겠습니다.

답변

1

나는 당신이 원하는 것을 할 수있는 자동 방법을 알고하지 않습니다,하지만 당신은 당신의 인수를 통해 단지 루프 수와 같이, 당신의 명령을 구성 :

#!/bin/bash 

cmd=() 
while [ $# -gt 0 ]; do       # loop until no args left 
    if [[ $1 = --* ]]; then     # arg starts with -- 
     [[ ${#cmd[@]} -gt 0 ]] && "${cmd[@]}" # execute previous command 
     cmd=("${1#--}")      # start new array 
    else 
     cmd+=("$1")       # append to command 
    fi 
    shift          # remove $1, $2 goes to $1, etc. 
done 

[[ ${#cmd[@]} -gt 0 ]] && "${cmd[@]}"   # run last command 
-1

아마도 이런 식으로.

고양이 example.sh

while read line;do 
    $line 
done <<<$(echo [email protected] | sed 's/--/\n/g') 

나는

./example.sh '--echo 1 2 3 --dc -e 4sili5+p' 

출력

1 2 3 
9 
+0

이는 "공백 또는 쉘 와일드 카드 또는를 포함하는 모든 인수를 misparse 위하여려고하고 있다는 것을 시도 - ". –

+0

@GordonDavisson 네, 그 대답은 최상위는 아니지만 우리는 cmd의 유형에 대해 아무 것도 모릅니다. –

관련 문제