如何从文件读取变量?

如何从文件读取变量?

我想在我的脚本中插入一个从文本文件中读取的值(字符串)。

例如,而不是:

echo "Enter your name"
read name

我想从另一个文本文件读取一个字符串,因此解释器应该从文件中读取字符串而不是用户输入。

答案1

要从文件中读取变量,我们可以使用source.命令。

假设文件包含以下行

MYVARIABLE="Any string"

然后我们可以使用导入这个变量

#!/bin/bash

source <filename>
echo $MYVARIABLE

答案2

考虑到您希望将文本文件的所有内容保存在变量中,您可以使用:

#!/bin/bash

file="/path/to/filename" #the file where you keep your string name

name=$(cat "$file")        #the output of 'cat $file' is assigned to the $name variable

echo $name               #test

或者,在纯 bash 中:

#!/bin/bash

file="/path/to/filename"     #the file where you keep your string name

read -d $'\x04' name < "$file" #the content of $file is redirected to stdin from where it is read out into the $name variable

echo $name                   #test

答案3

name=$(<"$file") 

从 来看man bash:1785,这个命令替换相当于name=$(cat "$file")但速度更快。

答案4

另一种方法是将标准输入重定向到文件,所有用户输入都按照程序预期的顺序排列。例如,对于程序(名为script.sh

#!/bin/bash
echo "Enter your name:"
read name
echo "...and now your age:"
read age

# example of how to use the values now stored in variables $name and $age
echo "Hello $name. You're $age years old, right?"

和输入文件(称为input.in

Tomas
26

您可以通过以下两种方式之一从终端运行它:

$ cat input.in | ./script.sh
$ ./script.sh < input.in

这相当于运行脚本并手动输入数据 - 它会打印出一行“你好,托马斯。你 26 岁了,对吧?”。

作为拉杜·拉代亚努已经建议,您可以cat在脚本中使用 来将文件内容读入变量 - 在这种情况下,您需要每个文件只包含一行,并且只包含您想要的特定变量的值。在上面的例子中,您将输入文件拆分为一个包含姓名的文件(例如name.in)和一个包含年龄的文件(例如age.in),并将read nameread age行分别更改为name=$(cat name.in)age=$(cat age.in)

相关内容