2

首先,让我声明我对 Bash 脚本非常陌生。我试图为我的问题寻找解决方案,但找不到任何对我有用的方法。
假设我想使用 bash 解析如下所示的文件:

variable1 = value1
variable2 = value2

我使用以下代码逐行拆分文件:

cat /path/to/my.file | while read line; do
    echo $line      
done

$line变量中,我想创建一个数组,我想将其拆分=为分隔符,这样我就可以从数组中获取变量名称和值,如下所示:

$array[0] #variable1
$array[1] #value1

最好的方法是什么?

4

2 回答 2

5

将 IFS 设置为 '=' 以便拆分行中 = 符号上的字符串,即:

cat file | while IFS='=' read key value; do
    ${array[0]}="$key"
    ${array[1]}="$value"
done

您也可以使用 -a 参数来指定要写入的数组,即:

cat file | while IFS='=' read -a array; do
    ...
done

bash 版本取决于。

后代完全错误的旧答案:

将论点添加-d =到您的read陈述中。然后你可以这样做:

cat file | while read -d = key value; do
    $array[0]="$key"
    $array[1]="$value"
done
于 2013-01-18T15:11:52.267 回答
3
while IFS='=' read -r k v; do
   : # do something with $k and $v
done < file

IFS 是“内部字段分隔符”,它告诉 bash 在“=”符号上分割行。

于 2013-01-18T15:24:14.337 回答