![Escape_$(밑줄 및 달러 기호)](https://linux55.com/image/106041/Escape_%24(%EB%B0%91%EC%A4%84%20%EB%B0%8F%20%EB%8B%AC%EB%9F%AC%20%EA%B8%B0%ED%98%B8).png)
이 Bash 스크립트가 있습니다
for i in 1 2 3
do
for j in 4 5 6
do
echo "hello_$i_$j"
done
done
하지만 인쇄됩니다
hello_4
hello_5
hello_6
세 번, 그리고 (아마도) 나는 원해요hello_1_4,hello_1_5, 등.
밑줄을 이스케이프 처리하거나 달러 기호만 사용하면 작동하지 않습니다. 어떤 아이디어가 있나요?
감사해요!
답변1
set -u
코드 상단에 다음 줄을 추가하세요 . 그런 다음 다시 실행하여 무엇을 얻는지 확인하십시오.
변수는 unbound error 입니다 i_
. 즉, 어디에도 정의되어 있지 않습니다. 이제 bash가 이 변수에 대해 이야기하는 이유는 무엇입니까 i_
? 당신은 그것을 어디에도 정의하지 않았습니다. echo 문을 주의 깊게 살펴보십시오. $i 뒤의 밑줄은 유효한 변수 이름 식별자 문자이기 때문에 "hello_$i_$j"
변수로 간주됩니다 .i_
_
따라서 Bash가 이를 방지하려면 변수 이름을 중괄호로 묶어야 합니다 {}
. 예를 들어 echo "Hello_${i}_${j}"
중괄호는 변수 이름이 오버플로되어 와 일치하는 것을 방지합니다 _
. 참고: 변수의 중괄호는 목적을 구분하는 데 사용되므로 $j
선택 사항입니다. "
.