Bash 如何在函数中正确替换变量
我很难在这个函数中使用正确的变量替换,尤其是使用Bash 如何在函数中正确替换变量,bash,shell,unix,Bash,Shell,Unix,我很难在这个函数中使用正确的变量替换,尤其是使用echo“$(…)string outputOFF () { host='mydevreporting.com' _pw='123456foobar' _dt=$(date +'%m-%d-%y') exp="SELECT * FROM metrics.account_use where account='foo' and profile='bar' order by date desc;"; echo "$(grep
echo“$(…)
string
outputOFF ()
{
host='mydevreporting.com'
_pw='123456foobar'
_dt=$(date +'%m-%d-%y')
exp="SELECT * FROM metrics.account_use where account='foo' and profile='bar' order by date desc;";
echo "$(grep real < <({ time mysql -u admin -p${_pw} -h ${host} -N -e "$exp"} 2>&1)):localhost:${_dt}"
#echo "$(grep real < <(\{ time mysql -u admin -p${_pw} -h ${host} -N -e "$exp"\} 2>&1)):localhost:${_dt}"
}
如您所见,echo“$(…)
位于该函数的内部outputOFF()
我还尝试过转义大括号\{,\}
,这允许替换变量,但不知何故,该命令无法正常工作。
echo“$(grep real<&1)):localhost:${{u dt}”
所以,我被卡住了 您缺少一个
在{…}
组表达式中,“$exp”
之后的code>(请参见此了解原因)。以下是更正的版本:
echo "$(grep real < <({ time mysql -u admin -p${_pw} -h ${host} -N -e "$exp"; } 2>&1)):localhost:${_dt}"
echo“$(grep real<&1)):本地主机:${u dt}”
您缺少一个在{…}
组表达式中,“$exp”
之后的code>(请参见此了解原因)。以下是更正的版本:
echo "$(grep real < <({ time mysql -u admin -p${_pw} -h ${host} -N -e "$exp"; } 2>&1)):localhost:${_dt}"
echo“$(grep real<&1)):本地主机:${u dt}”
至少对我来说,更少的大括号使它更具可读性
result=$( { time mysql -u admin -p${_pw} -h ${host} -N -e "$exp"; } 2>&1 | grep real );
echo "${result}:localhost:${_dt}"
time
正在stderr上报告。因此,捕获输出需要{}
或者丢弃结果,只捕获时间的结果
result=$( { time mysql -u admin -p${_pw} -h ${host} -N -e "$exp" >/dev/null; } 2>&1 )
echo ${result}":localhost:${_dt}"
不带引号的${result}
打印时不带换行符。因此,您可以使用附加的时间戳保留时间中的所有信息。更少的大括号使其更可读,至少对我来说是这样
result=$( { time mysql -u admin -p${_pw} -h ${host} -N -e "$exp"; } 2>&1 | grep real );
echo "${result}:localhost:${_dt}"
time
正在stderr上报告。因此,捕获输出需要{}
或者丢弃结果,只捕获时间的结果
result=$( { time mysql -u admin -p${_pw} -h ${host} -N -e "$exp" >/dev/null; } 2>&1 )
echo ${result}":localhost:${_dt}"
不带引号的${result}
打印时不带换行符。因此,您可以使用附加的时间戳保留time
中的所有信息。在“$exp”
中的第一个引号结束字符串。因此,$exp的内容将公开给shell评估。让你高兴的是,一些分组阻止了这一点。但我不相信这个构想。Atime mysql…|grep real
更易于编写和理解。@ULick,命令替换可以包含引号(而且几乎必须精确地引用其中的变量),因此,“$exp
”周围的引号不会结束引用。整个结构看起来还是有点过于复杂。如果你有一个更好、更简单、可读性更好的结构,我很乐意看到它。谢谢。@ilkkachu不想探究,为什么它会起作用。试图把它解开一点。参见下面的答案。“$exp”
中的第一个引号结束字符串。因此,$exp的内容将公开给shell评估。让你高兴的是,一些分组阻止了这一点。但我不相信这个构想。Atime mysql…|grep real
更易于编写和理解。@ULick,命令替换可以包含引号(而且几乎必须精确地引用其中的变量),因此,“$exp
”周围的引号不会结束引用。整个结构看起来还是有点过于复杂。如果你有一个更好、更简单、可读性更好的结构,我很乐意看到它。谢谢。@ilkkachu不想探究,为什么它会起作用。试图把它解开一点。见下面的答案。