변수 확장과 변수 인쇄(예: echo
또는 ) printf
의 차이점은 무엇입니까 ?
내가 올바르게 이해했다면 변수(해당 값)를 인쇄하는 것은 단지 예일 뿐입니다.확장하다그것. 아마도그 가치를 대체하다또한 예입니다.
고쳐 쓰다
"변수 확장"이라는 용어에 대해 간략하게 정의해 주세요.네 말로 말해봐, 차이점을 설명하기 직전.
답변1
확장과 인쇄는 서로 다른 작업입니다. 확장 커버쉘이 명령을 처리하는 단계 수: Bash에서는 중괄호 확장( {1..5}
이 됨 1 2 3 4 5
), 물결표 확장( 적절 ~user
해짐 /home/user
), 셸 인수 확장( ${variable}
변수 값으로 대체), 명령 대체, 산술 확장, 프로세스 대체, 토큰화 및 파일 이름 확장이 가능합니다. (당신은 또한 볼 수 있습니다POSIX 단어 확장.)
확장이라는 용어의 이러한 모든 용도에 대한 한 가지 가능한 설명은 모두 명령 확장으로 이어질 수 있다는 것입니다.즉길어집니다(이는 C에서 쉘을 개발할 때 특별히 고려해야 할 사항입니다).
귀하의 경우 확장은 매개변수 확장입니다.
echo "${variable}"
~이 되다
echo "value"
당신이 말한 변수 대체 후에
echo value
따옴표를 제거한 후(약간 단순화) echo
인쇄합니다. Just echo
및 printf
는 셸에 내장되어 있어 셸만 포함되지만 단계가 분리되어 있고 상황은 외부 명령과 동일합니다.
그러므로 인쇄술은 확장의 특별한 경우가 아니었습니다. 그러나 링크한 질문에 표시된 대로 교체는 다음을 참조하세요.배쉬 매뉴얼더 알아보기.
답변2
예를 들어 셸의 기능을 살펴보면 다음과 같습니다.
- 사용자 입력을 기다립니다
- 사용자 입력 해석
- 사용자 입력에 따라 조치
- 다른 프로그램/프로세스와 통신
물론 있습니다.
- 데이터를 화면에 인쇄
...실제로 터미널까지요. 그럼에도 불구하고 셸은 사용자가 데이터를 볼 수 있도록 조치를 취합니다.
쉘이 하는 일은 변수를 확장하는 것뿐입니다.사용자 입력을 해석할 때. 쉘은 사용자가 변수를 참조했다는 것을 인식하고 마치 사용자 입력이 참조가 아닌 변수의 내용을 포함하고 있는 것처럼 사용자 입력을 해석합니다. 예를 들어 FOO
값을 저장하는 변수가 있다고 가정합니다 bar
. 사용자가 명령문을 입력합니다 echo $FOO
. 쉘은 명령문을 해석하기 시작하여 이를 $FOO
지정된 변수에 대한 참조로 인식하고 FOO
마치 사용자가 이를 입력한 것처럼 계속해서 명령문을 해석합니다 echo bar
.
인쇄 변수는그 내용을 투영하다사용자가 인식할 수 있는 방식(예: 읽기)입니다. 변수에 저장된 값을 사용자에게 전달하기 위해 처리하는 실제 작업을 수행하는 것입니다. 예제에서는 echo $FOO
변수가 FOO
먼저 확장된 다음 확장의 결과로 echo
루틴이 내용을 FOO
화면에 인쇄합니다.
어떤 의미에서 값을 인쇄하는 것은 변수를 확장하는 것과 반대입니다. 변수가 확장되면쉘이 데이터를 읽고 있습니다무엇을 해야 할지 결정하기 위해. 변수를 인쇄할 때,쉘이 데이터를 배포하고 있습니다., 사용자에게.
답변3
간단히 말해서, 변수를 확장하면 해당 값이 대체되고 해당 변수는 쉘 명령이나 스크립트의 일부로 사용될 수 있습니다.
echo
printf
문자열을 표준 출력(보통 화면)으로 인쇄하는 특정 명령입니다 . 문자열은 확장된 쉘 변수, 문자열 리터럴 또는 다른 명령이나 명령 세트의 출력일 수 있습니다.
따라서 보시다시피 완전히 다릅니다. 변수를 인쇄하지 않고 확장할 수 있거나 확장된 변수가 아닌 것을 인쇄할 수 있습니다.
답변4
쉘은 영향을 받은 명령을 실행하기 전에 변수 확장을 수행합니다. 이것은 명령과 아무 관련이 없습니다. 명령일 수도 있고 echo
다른 printf
명령일 수도 있습니다.
예를 들어:
param='-ltr'
ls $param
다음으로 확장
ls -ltr
실행되는 명령입니다.