누군가 이 코드를 변환할 수 있나요? 나는 이것을 인터넷에서 얻었다.
처음에는 명령의 매개변수 중 하나가 더하기 기호(+) 또는 빼기 기호(-)입니다. 하지만 지금 추가하면 되므로(더 이상 매개변수에 없음) 자동으로 추가하기를 원합니다.
-|+) 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
백틱이나 구문을 사용하여 수행할 수 있는 작업이 무엇인지 알 수 없습니다.$(...)