Bash从文件读取并存储到MATLAB中的变量

时间:2015-03-26 02:53:23

标签: bash matlab

我试图从Bash中一个非常简单的1行文件中读取2个浮动数字。我想将这两个数字存储到变量中。我从谷歌搜索看到的所有例子都是:

while read VAR1 VAR2
do
   <command>
done < file.txt

但这会使VAR1VAR2仅限于while循环。如何存储这两个变量,以便我可以在脚本的任何位置使用它们?非常感谢!

4 个答案:

答案 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