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=在输出中获得部分?
谢谢
如果包含变量的文件始终使用bash语法(例如X = Y),则另一个选项是使用source:
#!/bin/bash
echo "Read a variable"
source test.txt
echo $EXAMPLE
Run Code Online (Sandbox Code Playgroud)
作为获取整个文件的替代方法,您可以尝试以下操作:
while read line; do
[[ $line =~ EXAMPLE= ]] && declare "$line" && break
done < test.txt
Run Code Online (Sandbox Code Playgroud)
它将扫描文件,直到找到看起来像赋值的第一行EXAMPLE,然后使用declare内置来执行赋值.它可能有点慢,但它对实际执行的内容更具选择性.
我认为最正确的方法是获取包含变量的文件(如果它具有 bash 语法),但如果我要这样做,我会在子外壳中获取它,以便如果有其他在那里声明的变量,它们不会覆盖当前 shell 中的任何重要变量:
(. test.txt && echo $EXAMPLE)
Run Code Online (Sandbox Code Playgroud)