그래서 시간에 10초를 추가하고 싶습니다. 이 작업을 수행하는 명령은 다음에서 제공됩니다.여기.
표시하려면:
STARTIME="$(date +"%T")"
ENDTIME="$STARTIME today + 10 seconds"
CALL="$(echo date -d $ENDTIME +'%H:%M:%S')"
이 코드의 문제점은 $CALL
변수를 에코하면 다음과 같은 결과가 나온다는 것입니다.
date -d 12:51:19 today + 10 seconds +%H:%M:%S
이 문자열의 올바른 버전은 다음과 같습니다.
date -d "12:48:03 today + 10 seconds" +'%H:%M:%S'
하지만 변수 이름을 다음과 같이 따옴표로 묶으면 다음과 같습니다.
STARTIME="$(date +"%T")"
ENDTIME="$STARTIME today + 10 seconds"
CALL="$(echo date -d '$ENDTIME' +'%H:%M:%S')"
...문자열 리터럴로 해석되며 에코하면 다음과 같은 결과가 나타납니다.
date -d $ENDTIME +%H:%M:%S
그래서 제가 해야 할 일은 변수를 호출하여 그 값이 함수로 바뀌고 큰따옴표(")로 묶이도록 하는 것입니다. 단, 변수 이름을 리터럴 문자열로 읽지 마십시오. 이 점이 매우 혼란스럽습니다. Python이 그리워요. !
답변1
완전성을 위해 모든 항목(")이나 마지막 항목이 필요하지 않습니다 $(echo ...)
. 다음은 동일한 효과를 생성하는 단순화된 작업 버전입니다.
STARTIME=$(date +"%T")
ENDTIME="$STARTIME today + 10 seconds"
CALL="date -d '$ENDTIME' +'%H:%M:%S'"
var=$(...)를 수행할 때는 인용이 필요하지 않지만 일반적으로 var="many Words"를 사용할 때는 인용이 필요합니다.
a=$(echo 'a b'); echo "$a" # result: a b
(') 내부 (")에는 특별한 의미가 없으며 그 반대의 경우도 마찬가지입니다. 예를 들면 다음과 같습니다.
a="that's nice"; echo "$a" # result: that's nice
a='that "is nice'; echo "$a" # result: that "is nice
답변2
호출 문을 편집하여 다음을 수행할 수 있습니다.
CALL="$(echo date -d \"$ENDTIME\" +\'%H:%M:%S\')"
\
문자 "
및 를 이스케이프하는 데 사용할 수 있습니다 '
. 이제 출력은 다음 echo $CALL
과 같습니다:
date -d "22:46:37 today + 10 seconds" +'%H:%M:%S'
답변3
작은따옴표 추가~에큰따옴표로 묶인 ENDTIME
변수는 다음과 같습니다.
ENDTIME="'$STARTIME today + 10 seconds'"
CALL="$(echo date -d "$ENDTIME" +'%H:%M:%S')"
그것은 주어야한다
date -d '19:35:28 today + 10 seconds' +%H:%M:%S