打开包含两列的文件并动态创建变量

时间:2016-12-19 21:02:26

标签: bash shell

我想知道是否有人可以提供帮助。我没有设法找到很多例子,我也不确定从哪里开始编码。

我有一个包含以下内容的文件......

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

列由'='分隔,第二列中的某些项可能包含间隙,因为它们不仅仅是路径。

理想情况下,我想在我的脚本中打开一次并将第一列存储为变量,将第二列存储为值,例如......

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


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

这可能还是我生活在仙境?

由于

3 个答案:

答案 0 :(得分:1)

您可以使用以下循环:

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

请注意,foo="3 5"之类的行会在变量foo的值中包含引号。

答案 1 :(得分: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" )'

答案 2 :(得分:-1)

source my-file怎么样?但它不适用于空格,但适用于您共享的内容。这是一个例子:

reut@reut-home:~$ cat src 
test=123
test2=abc/def
reut@reut-home:~$ echo $test $test2

reut@reut-home:~$ source src
reut@reut-home:~$ echo $test $test2
123 abc/def