2016-12-19 4 views
0

誰かが助けることができるのだろうかと思います。私は例の方法で多くを見つけることはできませんでしたし、どこでコーディングを開始するのかはわかりません。私は、次の内容のファイルを持っている2つの列を持つファイルを開き、変数を動的に作成する

...

VarA=/path/to/a 
VarB=/path/to/b 
VarC=/path/to/c 
VarD=description of program 
... 

は、「=」、彼らはただパスがないので第二列の項目のいくつかは、ギャップを含むことが区切られます。理想的には

私はかつて私のスクリプトでこれを開いて、例えば変数と値として、第2、として最初の列を格納するのが大好きです...

echo $VarA 
... 
/path/to/a 


echo $VarB 
... 
/path/to/a 

が、これは可能ですか私が住んでいます妖精の土地で?

おかげ

+1

'source'が頭に浮かぶ...あなたは完全な例を示していることはできますか? –

+0

'= 'の前にスペースやその他の特殊文字を入れることはできますか? – anubhava

+0

空白はありませんが、特殊文字が含まれている可能性はありますが、ほとんどありません。それにはアンダースコアまたはマイナスがあるかもしれませんが、他には何もありません。 –

答えて

1

あなたは、次のループを使用することができるかもしれない:これは一例です。

+0

ありがとうございました、私は私が必要としなかった行(コメントやコメント#のような)を無視するためにデラールの前にIF文でこれを使用しました。迅速な回答ありがとうございます。 –

-1

source my-fileは?スペースでは動作しませんが、共有しているもので動作します。 foo="3 5"ような行は変数fooの値の引用符が含まれること、しかし、

while IFS== read -r name value; do 
    declare "$name=$value" 
done < file.txt 

注:

[email protected]:~$ cat src 
test=123 
test2=abc/def 
[email protected]:~$ echo $test $test2 

[email protected]:~$ source src 
[email protected]:~$ echo $test $test2 
123 abc/def 
+1

その可能性がありますが、私は理想的には、それらを持っているいくつかのエントリがあるので、スペースに対応するソリューションが必要です。スペースでVarDを含めるように私の質問を更新します –

1

Unixの変数名には、マイナス記号や特殊文字は使用できません。

あなたが一緒にキーと値を格納するためBASHの連想配列を使用して検討してください。

# declare an associative array 
declare -A arr 

# read file and populate the associative array 
while IFS== read -r k v; do 
    arr["$k"]="$v" 
done < file 

# check output of our array 
declare -p arr 
declare -A arr='([VarA]="/path/to/a" [VarC]="/path/to/c" [VarB]="/path/to/b" [VarD]="description of program")' 
+0

ありがとうございます。これは詳細な例のchepnerよりももう少し詳細ですが、私は使用したものであり、もっと詳細を必要としなかったので、彼を答えとしてマークします。ありがとうございます、時間を感謝し、助けてください。 –

+0

なぜ、あなたが '='の前にマイナス記号と特殊文字があるかもしれないと言われたので、私が代わりに答えを投稿した理由。もしそうなら、 '$ name = $ value"を宣言すると動作しません。 – anubhava

関連する問題