bash while循环从文本文件分解变量
原文内容bash while循环从文本文件分解变量,bash,shell,while-loop,Bash,Shell,While Loop,原文内容 $var1 $var4 $var3 $var2 testparher.sh的内容 #!/bin/bash var1="Smith^John" var2="998877" var3="member" var4="12" cat /dev/null > file.txt filename=origlist while read line; do echo $line >> file.txt done < "$filename" 我得到的file.
$var1
$var4
$var3
$var2
testparher.sh的内容
#!/bin/bash
var1="Smith^John"
var2="998877"
var3="member"
var4="12"
cat /dev/null > file.txt
filename=origlist
while read line; do
echo $line >> file.txt
done < "$filename"
我得到的file.txt是
$var1
$var4
$var3
$var2
那么,让循环将解析后的文本视为预加载变量的语法是什么呢
非常感谢您抽出时间。您正在寻找
eval
,但它附带了很多警告
或者,您可能正在查找此处的文档
cat <<____HERE >file.txt
$var1
$var4
$var3
$var2
____HERE
cat您需要使用eval:
#!/bin/bash
var1="Smith^John"
var2="998877"
var3="member"
var4="12"
cat /dev/null > file.txt
filename=origlist
while read line; do
eval echo $line >> file.txt
done < "$filename"
#/bin/bash
var1=“史密斯^约翰”
var2=“998877”
var3=“成员”
var4=“12”
cat/dev/null>file.txt
filename=origlist
读行时;做
eval echo$line>>file.txt
完成<“$filename”
您可以通过使用“间接扩展”(有关说明,请参阅Bash手册页面)在不使用“eval”的情况下执行此操作:
在读取var | |[[$var]]时;做
varname=${var#$}
printf“%s\n”${!varname}
完成文件.txt
“[$var]]”是输入文件中允许未终止的最后一行所必需的
必须从变量名中删除“$”。它需要在输入文件中吗
如果变量值以“echo”选项开头,请使用“printf”而不是“echo”。非常感谢!!!!我所要做的就是添加eval。我真不敢相信我哪儿都找不到这个。感谢您强烈建议不要在此处使用eval
。可以将任意代码插入到origlist
,此代码将愉快地执行它。+1这更安全,因为如果修改输入文件的内容,使用eval
会带来巨大的安全风险。使用间接参数扩展,最糟糕的情况是意外输入将导致错误的替换;我认为file.txt
在设置它引用的变量之前就存在了。
#!/bin/bash
var1="Smith^John"
var2="998877"
var3="member"
var4="12"
cat /dev/null > file.txt
filename=origlist
while read line; do
eval echo $line >> file.txt
done < "$filename"
while read var || [[ $var ]] ; do
varname=${var#$}
printf '%s\n' "${!varname}"
done <"$filename" >file.txt