여러 변수를 한 번에 정의(셸에 복사하여 붙여넣기)

여러 변수를 한 번에 정의(셸에 복사하여 붙여넣기)

변수 목록이 있고 파일의 변수를 복사하여 셸에 붙여넣고 Enter실행을 누릅니다. 예를 들어:

var1="myvar1"
var2="myvar2"

실제로 변수가 많기 때문에 시간을 절약하기 위해 하나씩 복사해서 붙여넣고 실행하는 것이 아니라 한 번의 작업으로 모든 작업을 완료하길 바랍니다.
복사하여 붙여넣기를 시도했습니다.

(
var1="myvar1"
var2="myvar2"
)

echo $var1해당 형식의 날짜 대신 빈 줄을 출력합니다.

한 번의 작업으로 여러 변수를 실행하는 방법은 무엇입니까?

답변1

하나씩 복사할 필요 없이 모든 줄을 함께 붙여넣으면 개행 문자가 Enter 키로 사용됩니다.

왜냐하면

(
var1="myvar1"
var2="myvar2"
)

서브쉘에서 실행되기 때문에 작동하지 않습니다. final 이전에 변수의 내용을 인쇄하면 작동합니다 ).

(
var1="myvar1"
var2="myvar2"
echo $var2
)

Commpound Commands다음 섹션에서 설명 합니다 man bash.

복합 명령

복합 명령은 다음 명령 중 하나입니다. 대부분의 경우 명령 설명의 목록은 하나 이상의 줄 바꿈으로 명령의 나머지 부분과 구분될 수 있으며 세미콜론 대신 줄 바꿈 문자가 뒤에 올 수 있습니다.

(list) list 서브셸 환경에서 실행합니다(아래 명령 실행 환경 참조). 쉘 환경에 영향을 미치는 변수 할당 및 내장 명령은 명령이 완료된 후에 더 이상 유효하지 않습니다. 반환 상태는 목록의 종료 상태입니다.

나중에 그는 이렇게 말했습니다.

{ list; } list는 현재 쉘 환경에서만 실행됩니다. 목록은 줄 바꿈 또는 세미콜론으로 끝나야 합니다. 이를 그룹 명령이라고 합니다. 반환 상태는 목록의 종료 상태입니다. 메타 문자( 및 )와 달리 { 및 }는 예약어이므로 예약어를 인식할 수 있는 위치에 나타나야 합니다. 단어 분리를 유발하지 않으므로 공백이나 기타 쉘 메타 문자로 목록과 구분해야 합니다.

따라서 명령은 하위 쉘에서 실행되지 않고 현재 쉘 환경에서 실행되기 때문에 작동합니다.

{
var1="myvar1"
var2="myvar2";
}

에 대해 간단한 질문을 많이 하시는 것 같아요 Bash. Bash 튜토리얼을 읽고 man bash일반적인 내용을 알아보세요.헤비히트 트랩.

답변2

사용하는 괄호로 인해 하위 쉘이 포함된 명령을 실행하므로 쉘이 종료되면 de 변수는 여전히 현재 쉘에 설정되지 않습니다.

왜 이 괄호가 이러한 변수를 "한 번" 설정한다고 생각하는지, 또는 왜 이러한 변수를 "한 번" 설정해야 하는지는 알 수 없지만 이러한 할당을 다음과 같이 한 줄에 넣을 수 있습니다.

var1="myvar1" var2="myvar2"

물론 Arkadiusz Drabczyk가 언급한 것처럼 이 행을 모두 복사하여 붙여넣는 것이 더 쉽고 원하는 작업을 수행할 수 있다면 하지 않을 이유가 없습니다.

관련 정보