백틱을 변수로 사용할 때 일치하는 ""를 찾을 때 예기치 않은 EOF가 발생합니다.

백틱을 변수로 사용할 때 일치하는 ""를 찾을 때 예기치 않은 EOF가 발생합니다.

아래 코드가 실행 중입니다.

[ec2-user@ip restore]$ echo $snap_name
manual-test-2024-01-11-11-26-19
[ec2-user@ip restore]$  aws rds describe-db-cluster-snapshots --db-cluster-identifier creditpoc3 --query 'DBClusterSnapshots[].{DBClusterSnapshotIdentifier:DBClusterSnapshotIdentifier,Status:Status} | [?DBClusterSnapshotIdentifier == `'"$snap_name"'`']'' | grep creating
[ec2-user@ip-10-0-39-226 restore]$

하지만 출력을 변수로 가져오려고 하면 오류가 발생합니다.

[ec2-user@ip restore]$ snap_count=`aws rds describe-db-cluster-snapshots --db-cluster-identifier creditpoc3 --query 'DBClusterSnapshots[].{DBClusterSnapshotIdentifier:DBClusterSnapshotIdentifier,Status:Status} | [?DBClusterSnapshotIdentifier == `'"$snap_name"'`']'' | grep creating`
-bash: command substitution: line 1: unexpected EOF while looking for matching `''
-bash: command substitution: line 2: syntax error: unexpected end of file
-bash: command substitution: line 1: unexpected EOF while looking for matching `''
-bash: command substitution: line 2: syntax error: unexpected end of file
[ec2-user@ip restore]$

여기에 제안해주세요.

답변1

문제는 명령 대체에 이전 "백틱" 표기법을 사용하고 있다는 것입니다. 그들의 목적은낙담한, 무엇보다도 쉽게 중첩될 수 없기 때문입니다.

명령 대체가 쿼리 조건의 여는 백틱(즉, 해당 부분만)으로만 명령을 확장한다고 생각하면 나타나는 오류 메시지를 이해할 수 있습니다.

aws rds describe-db-cluster-snapshots --db-cluster-identifier creditpoc3 --query 'DBClusterSnapshots[].{DBClusterSnapshotIdentifier:DBClusterSnapshotIdentifier,Status:Status} | [?DBClusterSnapshotIdentifier == 

그런 다음 쉘은 snap_count다음의 변수를 연결하려고 시도합니다.

  • 해당 명령 호출의 결과 - 불균형한 왼쪽 작은따옴표가 있기 때문에 쉘이 이를 구문 분석할 수 없습니다(이것이 두 오류 메시지 중 첫 번째 원인입니다).
  • 해석 결과는 '"$snap_name"'리터럴 문자열입니다. "$snap_name"왜냐하면 쉘의 관점에서 작은따옴표로 묶인 다음
  • 다른명령 대체는 원하는 쿼리 기준의 닫는 백틱으로 시작됩니다. 이는 명령의 출력이 될 것이며 ']'' | grep creating, 이는 다시 불균형한 작은따옴표를 가지며 두 오류 메시지 중 두 번째의 원인입니다.

@ilkkachu가 지적했듯이 결과적으로 $snap_count할당의 유일한 유효한 부분, 즉 리터럴 문자열이 할당됩니다 "$snap_name".

권장 $( ... )- 기호를 사용하세요.실제명령 대체(즉,밖의` ... `백틱), 이는 필요할 수 있는 조건의 쿼리 구문과 충돌을 일으키지 않습니다 ?DBClusterSnapshotIdentifier.

관련 정보