我想知道是否有人可以提供帮助。我没有设法找到很多例子,我也不确定从哪里开始编码。
我有一个包含以下内容的文件......
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
这可能还是我生活在仙境?
由于
答案 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