如何解析这样的文件并定义变量?

如何解析这样的文件并定义变量?

示例文件:

/Variable1=Value1/Variable2=Value Value Value/Variable3=Value3 Value3/ 

我希望它读取变量并设置它们。这意味着我将能够输入echo $Variable1并获取Value1输出等。我尝试了很多东西,但它们很长,并且当变量更改名称时不起作用。有谁知道有效的方法吗?

答案1

这是一个bash起点:

OIFS="$IFS"
IFS=/; set -f
for piece in $(cat file)
do
  var=$(echo "$piece" | cut -d= -f1)
  val=$(echo "$piece" | cut -d= -f2-)
  [ -n "$var" ] && eval $var=\"$val\"
done
IFS="$OIFS"
unset piece var val

虽然它会跳过空变量名称,但这不会对变量名称本身进行任何健全性检查。

第二种方式,因为我决心找到一种方法来做到这一点read

declare -a vars
IFS=/ read -a vars < file
for piece in ${vars[*]}
do 
  mangle=$(echo "$piece" | sed 's/=\(.*\)/="\1"/')
  eval $mangle
done
unset vars piece mangle

mangle 行只是用来引用等号后面的值。

答案2

. <(
    awk '
      BEGIN{RS="/";FS="="}
      NF==2{printf "%s=\"%s\"\n", $1, $2}
    ' file
)

这用于awk制作以下文本:

Variable1="Value1"
Variable2="Value Value Value"
Variable3="Value3 Value3"

这是来源的,因此Variable{1,2,3}可以在sh.

几点: 假定值不包含 ant /="

答案3

$ printf "%s\n" "$Variable1" "$Variable2" "$Variable3"



$ cat file
/Variable1=Value1/Variable2=Value Value Value/Variable3=Value3 Value3/ 
$ source <(tr / "\n" < file | sed -r 's/=(.*)/="\1"/')
$ printf "%s\n" "$Variable1" "$Variable2" "$Variable3"
Value1
Value Value Value
Value3 Value3

答案4

对于 bash:(如果您的字符串位于名为“liste.txt”的文件中)

IFS="/"
for val in $(cat liste.txt); do echo "$val" | sed -r "s/=(.*)$/=\"\1\"/g" | eval; done

之后,您只需尝试:

echo "$Varaible1"
echo "$Variable2"

等等

相关内容