CLI 및 for 루프의 변수 대체

CLI 및 for 루프의 변수 대체

이 질문이 어떤 형태로든 요청된 것이라고 확신합니다. 좋은 검색 결과를 찾을 수 없습니다.

나는 어떤 일을 N번 할 수 있는 스크립트를 원하고, N번 실행하고 싶은 명령을 변수로 스크립트에 전달할 수 있습니다. 일반적으로 명령은 반복자 값을 사용하여 무언가를 변경할 수 있습니다. 예를 들어 나는 다음과 같은 일을 하고 싶다.

~> doNtimes.sh 10 0 "ls *$(($2 + $i ))*.gnu | wc -l;"

doNtime.sh는 다음과 유사합니다.

  for ((i=0; i < $1; ++i)); do 
       echo "iterator=$i"; 
       $3
  done

물론, 현재 큰따옴표를 사용하는 것은 나에게 실패하고 있습니다. 작은따옴표를 사용해 보았지만 그것도 작동하지 않습니다(비록 다른 이유가 있지만). 공백이 있는 변수가 있고 스크립트에서 평가할 변수가 포함되어 있다는 사실로 인해 올바른 구문을 찾는 것이 불가능합니다... 어떤 아이디어가 있습니까?

답변1

다음을 평가해야 합니다.

for ((i=0; i < $1; ++i)); do 
    echo "iterator=$i"; 
    # for debugging
    echo eval "$3"
    eval "$3"
done

물론 명령 문자열에서 올바른 인용을 주의해야 합니다. 귀하의 예는 스크립트가 실행되기 전에 IE에서 ls *$(($2 + $i ))*.gnu | wc -l변수 참조가 해결된다는 점에서 위험합니다 . ""작은따옴표가 필요합니다.

doNtimes.sh 10 0 'ls *$(($2 + $i ))*.gnu | wc -l'

답변2

yes _do | head -n 10 | 3<&0 0>&- \
<<\INIT sh -s -- my args
    alias _do='echo these are "$@."'
    exec <&3 3>&- 
#END
INIT

쉘을 매우 쉽게 강제로 공급할 수도 있습니다. xargs그것도 괜찮습니다.

산출:

these are my args.
these are my args.
these are my args.
these are my args.
these are my args.
these are my args.
these are my args.
these are my args.
these are my args.
these are my args.

관련 정보