2017-04-19 70 views
1

我使用key=value數據解析文件,然後將它們作爲環境變量導出。我的解決方案的工作,但不能有特殊字符,例如:

。數據

VAR1=abc 
VAR2=d#r3_P{[email protected]@3l^ 

script.sh

#!/bin/bash 
while IFS="=" read -r key value; do 
    case "$key" in 
    '#'*) ;; 
    *) 
     eval "$key=\"$value\"" 
     export $key 
    esac 
done < .data 

$ . ./script.sh

輸出:

$ echo $VAR1 
abc 
$ echo $VAR2 
d#r3_P{[email protected]^ 

的應該是:d#r3_P{[email protected]@3l^

回答

2

你不需要EVAL所有,只是用declare內置的bash上創建即時變量!

case "$key" in 
    '#'*) ;; 
    *) 
     declare $key=$value 
     export "$key" 
esac 
+1

謝謝你,就像一個魅力: - ) – User

1

只是轉義反斜線$符號\

+0

如果數據將自動根據一些第三方應用程序生成並保存在'.data'文件,那麼你可能無法做到這一點的自動化環境 – Rogus

1

如果你不能改變你分配價值,關鍵的時候逃跑的特殊字符$。數據文件。分配行更改爲:

eval "$key=\"${value//\$/\\\$}\"" 

${variable//A/B}意味着variableA每個實例代入B

更多有用的信息在bash的變量here