다른 파일에서 변수 가져오기

다른 파일에서 변수 가져오기

스크립트 파일이 있습니다.

#!/usr/bin/env bash

. /home/$USER/git_projects/cfhookbash/config.txt

deploy_challenge() {
}

config.txt에는www.example.com_token="asdfasdf"

www.example.com_token내 예에서는 , 의 값을 인쇄(또는 재사용)해야 합니다 asdfasdf.

알겠어요/home/sineverba/git_projects/cfhookbash/config.txt: line 1: www.k2p.it_token=asdfasdf: command not found

답변1

에서 bash변수 이름은 1바이트 영숫자 또는 밑줄로만 구성될 수 있습니다(첫 번째 문자는 숫자일 수 없음).

따라서 www.example.com_token유효한 변수명이 아니기 때문에 www.example.com_token="asdfasdf"할당으로 인식되지 않고 단순 명령으로 인식됩니다.

ksh93(쉘이 bash에뮬레이션을 시도하는 곳) 에서는 변수를 다음과 같이 정의한 www.example.com_token="asdfasdf"경우에만www화합물바꾸다:

$ compound www
$ www.example.com_token="asdfasdf"
$ typeset -p www
typeset -C www=(example=(com_token=asdfasdf))
$ printf '%s\n' "${www.example.com_token}"
asdfasdf

에서는 bash연관 배열 변수(복사된 ksh93 기능 중 하나)를 사용할 수 있습니다 bash.

typeset -A token
token[www.example.com]=asdfasdf
printf '%s\n' "${token[www.example.com]}"

ksh93(이 구문은 및 에서도 작동합니다 zsh).

쉘 구문과 호환되도록 수정할 수 없는 경우 config.txt평가하기 전에 즉시 편집할 수 있습니다. 다음과 같습니다( ksh93, bash또는 사용 zsh):

typeset -A token
. <(sed 's/^\([^=]*\)_token=/token[\1]=/' < config.txt)

x.y_token=다음 으로 변환 token[x.y]=:

. <(sed -e :1 -e 's/^\([^=]*\)\.\(.*=\)/\1_\2/; t1' < config.txt)

.의 왼쪽을 각각 으로 바꿉니다.=_

그러나 필요하지 않은 경우 다음 중 하나로 대체할 수 있습니다. 예를 들면 다음과 같습니다.

foo.bar_token="multi
line .x. _token assignment (=)"

또는 파일에 작업 이상의 내용이 포함되어 있는 경우.

이제 실제로 올바른 셸 구문이 포함되어 있지 않으면 셸 구문의 특수 연산자인 또는 가 config.txt포함된 줄과 같은 다른 구문 문제를 찾아야 합니다 .foo="price: $12"foo="x `y' z"$`

답변2

내가 언급했듯이 txt 파일은 유효한 쉘 스크립트가 아니기 때문에 얻을 수 없습니다.

그것을 얻기 위해특별한가치, 시도

config=/home/$USER/git_projects/cfhookbash/config.txt
token=$( grep -oP 'www.example.com_token="\K[^"]+' "$config" )

관련 정보