스크립트 파일이 있습니다.
#!/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" )