从其他文件中读取Bash变量赋值

Mar*_*lli 1 unix bash shell scripting

我有这个测试脚本:

#!/bin/bash
echo "Read a variable" 
#open file
exec 6<test.txt
read EXAMPLE <&6
#close file again
exec 6<&-
echo $EXAMPLE
Run Code Online (Sandbox Code Playgroud)

该文件test.txt只有一行:

EXAMPLE=1
Run Code Online (Sandbox Code Playgroud)

输出是:

bash-3.2$ ./Read_Variables.sh
Read the variable
EXAMPLE=1
Run Code Online (Sandbox Code Playgroud)

$EXAMPLE在这种情况下,我只需要使用值1.那么我怎样才能避免EXAMPLE=在输出中获得部分?

谢谢

Joe*_*way 6

如果包含变量的文件始终使用bash语法(例如X = Y),则另一个选项是使用source:

#!/bin/bash
echo "Read a variable" 
source test.txt
echo $EXAMPLE
Run Code Online (Sandbox Code Playgroud)


che*_*ner 6

作为获取整个文件的替代方法,您可以尝试以下操作:

while read line; do
    [[ $line =~ EXAMPLE= ]] && declare "$line" && break
done < test.txt
Run Code Online (Sandbox Code Playgroud)

它将扫描文件,直到找到看起来像赋值的第一行EXAMPLE,然后使用declare内置来执行赋值.它可能有点慢,但它对实际执行的内容更具选择性.


Mic*_*bus 5

我认为最正确的方法是获取包含变量的文件(如果它具有 bash 语法),但如果我要这样做,我会在子外壳中获取它,以便如果有其​​他在那里声明的变量,它们不会覆盖当前 shell 中的任何重要变量:

(. test.txt && echo $EXAMPLE)
Run Code Online (Sandbox Code Playgroud)