我想从我的脚本中轻松保存变量名称及其内容。
目前: -
LOGFILE=/root/log.txt
TEST=/file/path
echo "TEST : ${TEST}" >> ${LOGFILE}
期望: -
LOGFILE=/root/log.txt
function save()
{
echo "$1 : $1" >> ${LOGFILE}
}
TEST=/file/path
save TEST
显然,上述save
功能只保存TEST : TEST
我希望它保存为TEST : /file/path
可以这样做吗?怎么样?非常感谢提前!
答案 0 :(得分:5)
您想使用变量间接。此外,请不要使用function
关键字,它不是POSIX,只要您在函数名末尾有()
,也不是必需的。
LOGFILE=/root/log.txt
save()
{
echo "$1 : ${!1}" >> ${LOGFILE}
}
TEST=/file/path
save TEST
$ TEST=foo; save(){ echo "$1 : ${!1}"; }; save TEST
TEST : foo
答案 1 :(得分:3)
是的,使用间接扩展:
echo "$1 : ${!1}"
参数扩展的基本形式是$ {parameter} [...]如果参数的第一个字符是感叹号(!),则引入一个变量间接的级别。 Bash使用从参数的其余部分形成的变量的值作为变量的名称;然后展开此变量,并将该值用于替换的其余部分,而不是参数本身的值。这称为间接扩展
答案 2 :(得分:0)
考虑使用printenv
功能。它完全按照它在锡上的说法,打印您的环境。它也可以带参数
$ printenv
SSH_AGENT_PID=2068
TERM=xterm
SHELL=/bin/bash
LANG=en_US.UTF-8
HISTCONTROL=ignoreboth
...etc
你可以做printenv然后grep任何你知道你定义的变量并且用两行来完成,例如:
$printenv | grep "VARNAME1\|VARNAME2"
VARNAME1=foo
VARNAME2=bar