터미널에서 변수에 값을 할당하는 방법은 무엇입니까?

터미널에서 변수에 값을 할당하는 방법은 무엇입니까?

터미널에서 어떻게 새 변수를 설정하고 값을 할당할 수 있나요? 긴 파일 이름을 가진 두 파일을 비교한 다음 다른 작업도 수행하고 싶다고 가정해 보겠습니다. 파일 이름이 길기 때문에 두 개의 변수를 만들고 각 변수에 값을 할당하고 자리 표시자로 사용하고 싶습니다. 다음과 같은 것이 필요합니다.

set var1 = 'long-file-name1'
set var2 = 'long-file-name2'
diff var1 var2

답변1

귀하의 질문에 있는 의사 코드(또는 다른 셸이나 프로그래밍 언어의 코드)는 다음 Bash 명령으로 변환됩니다.

var1='long-file-name1'
var2='long-file-name2'
diff "$var1" "$var2"

구문 은 다음 $var1과 같습니다매개변수 확장. 그러면 변수가 var1해당 값(이 경우에는 변수에 저장된 파일 이름)으로 대체됩니다. 따옴표가 없는 매개변수 확장 트리거단어 분리("필드 분할"이라고도 함) 및글로빙("파일 이름 확장" 및 "경로 이름 확장"이라고도 함) 일반적으로 추가 확장이 발생하는 것을 원하지 않습니다.당신이 그것을 원한다는 것을 구체적으로 아는 경우를 제외하고, 당신은해야꼭 동봉하세요모든 매개변수 확장 발생큰따옴표. (작은따옴표더욱 강력해 매개변수 확장도 방지할 수 있습니다.)

그러면 diff저장된 파일 이름이 var1첫 번째 명령줄 인수로 전달되고 저장된 파일 이름이 var2두 번째 명령줄 인수로 전달되어 명령이 실행됩니다.이로 인해 diff파일의 내용이 비교됩니다., 의도한 대로 다음을 실행한 것과 같습니다.

diff 'long-file-name-1' 'long-file-name-2'

내가 이 명령을 사용하지 않았다는 것을 알게 될 것입니다 export.왜냐하면 이 경우 export명령은 다음과 같습니다.필요하지도 적절하지도 않음당신이 하고 있는 일 때문에. 변수의 값을 쉘에서만 확장해야 하는 경우--쉘에서 시작된 프로그램에 의해 액세스됨--그러면 를 사용할 필요가 없습니다(사용해서는 안 됩니다) export.

시스템에 파일 이름을 명령줄 인수로 사용하지 않고 호출된 환경 변수에서 파일 이름을 읽는 이상한 명령이 있는 경우 변수 diff를 내보내야 합니다. 그러나 그것은 작동하는 방식이 아닙니다 . 명령 이 변수에 액세스하지 않으며 해당 변수에 대해 아무것도 모릅니다. 쉘은 이를 확장하여 에 전달하는 인수를 생성합니다 .var1var2diffdiffdiff

답변2

간단히 할당하여 bash의 변수에 파일 이름을 저장할 수 있습니다

예를 들어:variable=filename && variable2=filename2

diff그런 다음 다음과 같은 변수를 사용하여 두 파일을 만들 수 있습니다diff $variable $variable2

주의: 파일 이름에 공백이 있는 경우 특히 작업을 수행할 때 파일 이름과 변수를 모두 큰따옴표로 묶는 것이 가장 좋습니다.

관련 정보