Bash - 변수 설정

Bash - 변수 설정

Bash 스크립트에서 변수를 설정해야 합니다.

#!/usr/bin/env bash

GITNAME= git config --global user.name
echo " $GITNAME "

그러나 그것은 사실이 아닌 것 같습니다.

어떻게 작동하나요?

답변1

명령을 실행 git하고 그 결과를 변수에 저장하려고 한다고 가정하면 $(...)명령을 괄호 안에 넣는 구문이 필요합니다.

GITNAME="$(git config --global user.name)"
printf '%s\n' "$GITNAME"

=또한 과제에는 다음 공백이 없습니다. sjsam이 지적했듯이 괄호 주위에도 인용하는 것이 가장 좋습니다. 이는 명령 대체 후에도 단어 분리, 전역 확장 및 기타 여러 구문 분석 단계가 계속 발생하기 때문입니다. 따라서 귀하의 이름이 포함되면 *전역이 확장되며 이는 아마도 귀하가 원하는 것이 아닐 것입니다.

스타일 참고 사항으로 일반적으로 변수 이름을 모두 대문자로 사용하면 안 됩니다. 이렇게 하면 환경 변수와 충돌이 발생할 수 있습니다.

답변2

몇 가지 제안

아래의 문제는 무엇입니까?

GITNAME= git config --global user.name
  • 유사한 이름의 시스템 변수와 충돌할 수 있으므로 스크립트에서 모두 대문자 변수를 사용하지 마십시오.
  • =테이블 주위에 공간이 없어야합니다.variable=value
  • 귀하의 경우 오른쪽은 표현식이므로 백틱(``) 이는 명령이 포함되어 있으며 결과로 대체되어야 함을 쉘에 알려줍니다.
  • 이제 백틱은 레거시이므로 다음을 사용할 수 있습니다.[더 유능하다] $()그들보다는.
  • 방지하기 위한 최종 큰따옴표 명령 대체[분사].

수정된 진술

gitname="$(git config --global user.name)" # Error proof

답변3

명령의 출력을 변수로 저장하려면 bash명령 대체를 사용하십시오 $().

GITNAME="$(git config --global user.name)"

에서는 bash변수 선언 주위에 공백이 있을 수 없습니다.=

또한 대문자 변수 이름 지정에 주의하세요. 이는 모든 환경 변수를 동일한 이름(일반적으로 대문자)으로 대체하므로 주의하세요. 꼭 필요한 경우가 아니면 사용자 정의 변수에 소문자를 사용하십시오.

반면에 문자열을 변수로 저장하는 경우:

GITNAME="git config --global user.name"

관련 정보