Programing

Bash에서 $ {}와 $ ()의 차이점

crosscheck 2020. 10. 29. 07:50
반응형

Bash에서 $ {}와 $ ()의 차이점


이 질문에 이미 답변이 있습니다.

두 가지 질문이 있으며이를 이해하는 데 도움이 될 수 있습니다.

  1. ${}의 차이점은 무엇입니까 $()? 나는 ()별도의 셸에서 명령을 실행하고 배치 $하는 것은 값을 변수에 전달하는 것을 의미 한다는 것을 이해 합니다. 누군가 이것을 이해하는 데 도움을 줄 수 있습니까? 내가 틀렸다면 나를 바로 잡으십시오.

  2. 우리가 사용할 수 for ((i=0;i<10;i++)); do echo $i; done있고 잘 작동한다면 왜 나는 그것을 사용할 수 while ((i=0;i<10;i++)); do echo $i; done없습니까? 둘 다 실행주기의 차이점은 무엇입니까?


구문은 토큰 수준이므로 달러 기호의 의미는 포함 된 토큰에 따라 다릅니다. 표현식 $(command)`command`명령 대체를 나타내는 현대 동의어입니다 . 즉, 실행 command하고 여기에 출력을 넣습니다. 그래서

echo "Today is $(date). A fine day."

date명령 을 실행하고 에 대한 인수에 출력을 포함합니다 echo. 괄호는 공통점이 있지만 하위 쉘에서 명령을 실행하는 구문과 관련이 없습니다 (명령 대체는 별도의 하위 쉘에서도 실행 됨).

대조적으로, ${variable}는 모호함을 없애기위한 메커니즘 일 뿐이므로 ${var}text변수의 내용을 의미 할 때 변수의 내용이 var뒤 따릅니다 text( $vartext이는 변수의 내용을 의미하는 것과 반대로 vartext).

while루프는 true 또는 false로 평가해야 하나의 인자 예상 (또는 마지막 하나의 진리 값이 조사되는 경우, 실제로 여러 -이 아웃을 가리키는 주셔서 감사합니다 조나단 레플러를); 거짓이면 루프가 더 이상 실행되지 않습니다. for루프 아이템 귀속 차례로 루프 변수로 각각의리스트 반복 할; 참조하는 구문은 산술 값 범위에 대해 루프를 표현하는 하나의 일반적인 방법입니다.

이와 for같은 루프는 while루프 로 다시 표현할 수 있습니다 . 표현식

for ((init; check; step)); do
    body
done

다음과 같다

init
while check; do
    body
    step
done

가독성을 위해 모든 루프 제어를 한곳에 보관하는 것이 좋습니다. 하지만 이렇게 표현할 때 보시 for다시피 루프는 루프보다 훨씬 더 많은 역할을합니다 while.

물론이 구문은 Bash와 관련이 있습니다. 고전적인 Bourne 쉘은

for variable in token1 token2 ...; do

(좀 더 우아하게, echo인수 문자열에 %형식 코드가 포함되어 있지 않다고 확신하는 한 첫 번째 예제에서를 피할 수 있습니다.

date +'Today is %c. A fine day.'

이 격리 된 예제에서 많은 차이를 만들지는 않지만 가능한 프로세스를 피하는 것은 학습에 중요한 고려 사항입니다.)


  1. $() 의미 : "먼저 이것을 평가 한 다음 나머지 줄을 평가"합니다.

    예 :

    echo $(pwd)/myFile.txt
    

    다음과 같이 해석됩니다.

    echo /my/path/myFile.txt
    

    반면 ${}에 변수를 확장합니다.

    전의:

    MY_VAR=toto
    echo ${MY_VAR}/myFile.txt
    

    다음과 같이 해석됩니다.

    echo toto/myFile.txt
    
  2. 왜 그것을 사용할 수 없습니까? bash$ while ((i=0;i<10;i++)); do echo $i; done

    대답은 bash 구문 while이의 구문과 동일하지 않다는 것입니다 for.


  1. 당신의 이해가 옳습니다. {}에 대한 자세한 정보는 bash ref-매개 변수 확장을 참조하십시오.

  2. 'for'와 'while'은 구문이 다르며 반복에 대해 다른 스타일의 프로그래머 제어를 제공합니다. 대부분의 비 asm 언어는 유사한 구문을 제공합니다.

시간이 i=0; while [ $i -lt 10 ]; do echo $i; i=$(( i + 1 )); done지나면 본질적으로 반복에 대한 모든 것을 직접 관리 할 수 ​​있습니다.

참고 URL : https://stackoverflow.com/questions/27472540/difference-between-and-in-bash

반응형