Bash에서 변수 이름을 문자열 리터럴로 만들지 않고 명령의 일부로 값 주위에 따옴표를 사용하여 변수를 호출하려면 어떻게 해야 합니까?

Bash에서 변수 이름을 문자열 리터럴로 만들지 않고 명령의 일부로 값 주위에 따옴표를 사용하여 변수를 호출하려면 어떻게 해야 합니까?

그래서 시간에 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

관련 정보