我有一个包含2行的文件,我想分别将它们读成2个变量。我如何在shellscript(bash)中完成此任务?
答案 0 :(得分:2)
您可以在shell中打开文件描述符来读取变量:
#!/bin/bash
# open file
exec 6<tst.txt
read foo <&6
read bar <&6
# close file again
exec 6<&-
echo $foo $bar
编辑:
作为快速解释,这是使用IO重定向。通常,文件描述符按如下方式处理:
但是,没有什么可以防止使用其他文件描述符(最多9个),所以我们在文件描述符6中打开“tst.txt”文件,并使用IO redirection从中读取。
因此,exec 6<tst.txt
打开文件描述符6并将tst.txt
重定向到其中,而exec 6<&-
再次关闭它。
答案 1 :(得分:1)
我很遗憾现在不在linux上进行测试,但这很接近。
#!/bin/bash
file="/path/to/file"
# Store the previous IFS so we don't break anything else in the script.
prevIFS='$IFS'
# You need the line break to capture a newline.
IFS='
'
read var1 var2 < $file
echo "Var1: $var1"
echo "Var2: $var2"
# Set IFS back to normal
IFS='$prevIFS'
答案 2 :(得分:0)
试试这个
#!/bin/bash
I=0
while read; do
VAR[$I]=$REPLY
((I++))
done < file
echo ${VAR[0]}
echo ${VAR[1]}
这适用于超过2行的文件
答案 3 :(得分:0)
您可以重新配置输入文件(带变量)作为shell代码吗?即。
$ cat varFile
var1=xyz
var2=abc
$ cat myShellScript.sh
#/bin/whatever (bash)?
# source the variable file
. /path/to/varFile
echo $var1
echo $var2
这是shell脚本中的标准概念,可以更轻松地管理需要根据运行系统的物理硬件来控制(unix / linux)环境的配置问题。如果这是您关注的一部分,请告诉我,我将更新示例代码以扩展此技术。
我希望这会有所帮助。
答案 4 :(得分:0)
最简单的答案是使用requestError
命令。假设您的文件名是file.txt
sed
var1=($(sed '1q;d' file.txt))
var2=($(sed '2q;d' file.txt))
和1q
定义行号。
第1行中的所有值都将分配给var1,类似于var2。