繁体   English   中英

bash脚本,读取文件的每一行并存储到不同的变量(但没有找到命令消息)

[英]bash script that reads each line of a file and stores to different variables (but got command not found message)

感谢您的帮助。 我正在编写一个简单的bash脚本,该脚本仅读取文件的每一行,然后将每一行存储到不同的变量中。 例如,我希望脚本执行以下命令:

d1=AER
d2=BHR
d3=CEF
...

因此,我有一个包含10行的文本文件,每行是我要存储的变量(例如AER)的内容,并且具有以下test.sh脚本:

#!/bin/bash
for i in {1..10..1}
do
    $(d$i=$(sed -n ${i}p $HOME/textfile.txt))
done

但是,执行脚本时,它给了我

./test.sh: line 4: d1=AER: command not found
./test.sh: line 4: d2=BHR: command not found
./test.sh: line 4: d3=CEF: command not found
...

,而不是将字符存储到相应的变量中。 有人可以确定我做错了什么吗? 非常感谢!

脚本的问题在于,如果您需要在第一行插入一个变量,bash会认为它是程序的名称并尝试执行它。 您可以评估它,以使变量:

eval "d$i=$(sed ...)"

但是使用内置的read bash更为简单,因为它将行输入传递给指定的变量。 这是一种实现方法:

for ((i=1;; i++)); do
    read "d$i" || break;
done < textfile.txt
echo "$d1"
echo "$d2"

使用数组,但是正确的方法。

read -a d -d '\n' < textfile.txt
echo "${d[1]}"

作为阵列解决方案的替代方法,可以使用eval

((lnum=1))
exec 3< ${filetoread}
while read -u3 line
do
  eval `echo d${lnum}=\"${line}\"`
  ((lnum=1+${lnum}))
done
exec 3<&-

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM