您可以封裝您的變量中抽取功能,走的事實,即declare
函數內使用時產生的局部變量。每次調用該函數時,該技術都會讀取該文件。
readvar() {
# call like this: readvar filename variable
while read -r line
do
# you could do some validation here
declare "$line"
done < "$1"
echo ${!2}
}
給出一個所謂的 「數據」 包含文件:
input[0]='192.0.0.1'
input[1]='username'
input[2]='example.com'
input[3]='/home/newuser'
foo=bar
bar=baz
你可以這樣做:
$ a=$(readvar data input[1])
$ echo "$a"
username
$ readvar data foo
bar
這將讀取的數組並將其重命名:
readarray() {
# call like this: readarray filename arrayname newname
# newname may be omitted and will default to the existing name
while read -r line
do
declare "$line"
done < "$1"
local d=$(declare -p $2)
echo ${d/#declare -a $2/declare -a ${3:-$2}};
}
示例:
$ eval $(readarray data input output)
$ echo ${output[2]}
example.com
$ echo ${output[0]}
192.0.0.1
$ eval $(readarray data input)
$ echo ${input[3]}
/home/newuser
這樣做,你只需要對函數進行一次調用,整個數組就可以使用,而不必進行單獨的查詢。
真棒會嘗試當我約一小時回家。是的,它只包含Bash兼容的變量賦值。 – jmituzas 2011-01-13 21:26:20
感謝那些鏈接,那裏有很多真正有用的信息。 – jmituzas 2011-01-13 21:36:09