我试图从Bash中一个非常简单的1行文件中读取2个浮动数字。我想将这两个数字存储到变量中。我从谷歌搜索看到的所有例子都是:
while read VAR1 VAR2
do
<command>
done < file.txt
但这会使VAR1
和VAR2
仅限于while
循环。如何存储这两个变量,以便我可以在脚本的任何位置使用它们?非常感谢!
答案 0 :(得分:9)
使用单行读取文件时,while
循环是多余的(如问题中所述)。
为什么不简单地做:
read VAR1 VAR2 < file.txt
echo $VAR1
echo $VAR2
这将读取文件的第一行
答案 1 :(得分:2)
试试这个......
#!/bin/bash
var1="unknown"
var2="unknown"
while read VAR1 VAR2
do
var1=$VAR1
var2=$VAR2
done < file.txt
echo "v1=$var1 v2=$var2"
更新:我认为dvhh的回答是正确的。
答案 2 :(得分:2)
dvhh's answer包含关键指针:
如果您只阅读单行,那么没有理由使用while
循环强烈的>根本。
您的while
循环显示$VAR1
和$VAR2
为空,因为输入文件中的 last 尝试read
总是失败由于已达到 EOF ,导致变量设置为空字符串。
相比之下,如果您确实需要从多个行读取值并且需要在循环后访问它们,则可以使用bash 数组:
aVar1=() aVar2=() # initialize arrays
while read var1 var2
do
aVar1+=( "$var1")
aVar2+=( "$var2")
done < file.txt
# ${aVar1[@]} now contains all $var1 values,
# ${aVar2[@]} now contains all $var2 values.
请注意,最好不要对 shell 变量使用全大写名称,以避免与 environment 变量冲突。
答案 3 :(得分:0)
你们中的第一个人应该在你的脚本中获取你的分隔符,在我的例子中,uid和...分开&#34;:&#34;
uid=$( IFS=":" ;while read uid REST ; do echo $uid ; done </etc/passwd )
passwd=$( IFS=":" ;while read uid passwd REST ; do echo $passwd ; done </etc/passwd )
IFS是内部字段分隔符,默认为空格,您应该更改它 你可以把脚本放在varibale = $(脚本)中非常好用于编写脚本
你可以看到
echo $uid
echo $passwd