当前位置: 首页>>技术教程>>正文


如何从文件中读取变量?

, ,

问题描述

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

例如,而不是:

echo "Enter your name"
read name

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

最佳解决方案

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

让我们假设该文件包含以下行

MYVARIABLE="Any string"

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

#!/bin/bash

source <filename>
echo $MYVARIABLE

次佳解决方案

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

#!/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

第三种解决方案

在脚本中,您可以执行以下操作:

read name < file_containing _the_answer

你甚至可以多次这样做,例如在一个循环中

while read LINE; do echo "$LINE"; done < file_containing_multiple_lines

第四种方案

另一种方法是将标准输入重定向到您的文件,您可以按照程序预期的顺序输入所有用户。例如,使用该程序(称为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

它等同于只运行脚本并手动输入数据 – 它会打印出“Hello Tomas。你26岁了,对吗?”。

由于Radu Rădeanu具有already suggested,您可以在脚本中使用cat将文件内容读取为可变文件 – 在这种情况下,您需要每个文件只包含一行,只包含您想要的特定变量值。在上面的示例中,您将输入文件拆分为具有名称的输入文件(例如,name.in)和具有年龄的输入文件(例如,age.in),并将read nameread age行分别更改为name=$(cat name.in)age=$(cat age.in)

第五种方案

简短回答:

name=`cat "$file"`

第六种方案

我在这里找到了工作解决方案:https://af-design.com/2009/07/07/loading-data-into-bash-variables/

if [ -f $SETTINGS_FILE ];then
    . $SETTINGS_FILE
fi

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/2022.html,未经允许,请勿转载。