我想在我的脚本中插入一个我将从文本文件中读取的值(字符串)。
例如,而不是:
echo "Enter your name"
read name
Run Code Online (Sandbox Code Playgroud)
我想从另一个文本文件中读取一个字符串,因此解释器应该从文件而不是用户输入中读取字符串。
Tak*_*kat 126
要从文件中读取变量,我们可以使用sourceor.命令。
让我们假设文件包含以下行
MYVARIABLE="Any string"
Run Code Online (Sandbox Code Playgroud)
然后我们可以使用导入这个变量
#!/bin/bash
source <filename>
echo $MYVARIABLE
Run Code Online (Sandbox Code Playgroud)
Rad*_*anu 78
考虑到您希望将文本文件的所有内容保存在变量中,您可以使用:
#!/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
Run Code Online (Sandbox Code Playgroud)
或者,在纯 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
Run Code Online (Sandbox Code Playgroud)
tho*_*hom 15
在您的脚本中,您可以执行以下操作:
read name < file_containing _the_answer
Run Code Online (Sandbox Code Playgroud)
您甚至可以多次执行此操作,例如在循环中
while read LINE; do echo "$LINE"; done < file_containing_multiple_lines
Run Code Online (Sandbox Code Playgroud)
小智 10
name=$(<"$file")
Run Code Online (Sandbox Code Playgroud)
从man bash:1785,此命令替换等效name=$(cat "$file")但速度更快。
执行此操作的另一种方法是将标准输入重定向到您的文件,在该文件中您可以按照程序预期的顺序获得所有用户输入。例如,使用程序(称为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?"
Run Code Online (Sandbox Code Playgroud)
和输入文件(称为input.in)
Tomas
26
Run Code Online (Sandbox Code Playgroud)
您可以通过以下两种方式之一从终端运行它:
$ cat input.in | ./script.sh
$ ./script.sh < input.in
Run Code Online (Sandbox Code Playgroud)
这相当于只是运行脚本并手动输入数据 - 它会打印“Hello Tomas。你 26 岁,对吗?”这一行。
作为?拉杜[R deanu也已经建议,你可以用cat你的脚本中读取文件的内容到一个avariable -在这种情况下,你需要在每个文件只包含一条线,只有你想为特定变量的值. 在上面的例子中,你输入文件分割成一个名为(比如说name.in)和一个与年龄(比如age.in),并更改read name,并read age线name=$(cat name.in) 和age=$(cat age.in)分别。