Escape_$(밑줄 및 달러 기호)

Escape_$(밑줄 및 달러 기호)

이 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선택 사항입니다. ".

관련 정보