Unix의 Eval 명령

Unix의 Eval 명령

누군가 이 코드를 변환할 수 있나요? 나는 이것을 인터넷에서 얻었다.

처음에는 명령의 매개변수 중 하나가 더하기 기호(+) 또는 빼기 기호(-)입니다. 하지만 지금 추가하면 되므로(더 이상 매개변수에 없음) 자동으로 추가하기를 원합니다.

-|+) eval '(('jd2=${jd1}${5}${6}'))'
jd2date $jd2

답변1

코드가 이런가요?

case "$5" in
    -|+) eval '(('jd2=${jd1}${5}${6}'))' jd2date $jd2 
esac

그렇다면 다음과 같이 명령을 호출할 수 있습니다.

script arg1 arg2 arg3 arg4 + 6

또는

script arg1 arg2 arg3 arg4 - 10

코드를 다음과 같이 만들 수 있습니다.

 eval '(('jd2=${jd1}+${5}'))' jd2date $jd2 

명령은 다음과 같이 호출됩니다.

script arg1 arg2 arg3 arg4 10

${5}, ${6}, ${jd1}및 는 $jd2해당 변수의 내용으로 대체됩니다. 숫자 변수(예: $5$6)는 다음과 같습니다.위치 매개변수.

더 이상 변수에 연산자를 배치할 필요가 없으므로 eval호출할 필요가 없습니다. 코드는 다음과 같습니다.

 (( jd2=${jd1}+${5} ))
 jd2date $jd2

또는 약간 더 간결한 구문을 사용하세요.

 (( jd2 = jd1 + $5 ))
 jd2date $jd2

답변2

코드 조각으로 무엇을 달성하려는지 잘 모르겠지만 다음은 eval을 사용한 예와 유사한 명령 대체 연산자와의 비교입니다.

$ echo `echo 2 + 2 | bc`
4
$ echo $(echo 2 + 2 | bc)
4
$ eval "echo 2 + 2 | bc"
4
$ echo "date"
date
$ eval "date"
Thu Oct 10 21:20:01 EDT 2013

따라서 eval은 명령 또는 일련의 명령을 "평가"하고 해당 명령 실행 결과를 반환합니다. 나는 평생 동안 명령을 직접 실행하는 것 외에 eval백틱이나 구문을 사용하여 수행할 수 있는 작업이 무엇인지 알 수 없습니다.$(...)

관련 정보