他のファイルから変数を取得する

他のファイルから変数を取得する

スクリプトファイルがあります。

#!/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評価前にすぐに編集できます。 (ksh93bashまたは使用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"$`

おすすめ記事