
スクリプトファイルがあります。
#!/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
変数名は半角英数字または下線で構成できます(最初の文字は数字にすることはできません)。
したがって、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機能の1つ)を使用できます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" )