我很难在这个函数中使用正确的变量替换,尤其是使用echo "$(...)
字符串。
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 "$(grep real < <({ time mysql -u admin -p123456foobar -h mydevreporting.com -N -e "SELECT * FROM metrics.account_use where account='foo' and profile='bar' order by date desc;"; } 2>&1)):localhost:$(date +'%m-%d-%y')"
因为我看到了错误消息:
./tst.sh: command substitution: line 40: syntax error near unexpected token `)'
./tst.sh: command substitution: line 40: `{ time mysql -u admin -p${_pw} -h ${host} -N -e "$exp"} 2>&1)'
正如您所看到的,echo "$(...)
位于此函数outputOFF()
中。
我还尝试转义大括号\{, \}
,它允许变量替换,但不知何故该命令不能正常工作。
echo "$(grep real < <(\{ time mysql -u admin -p${_pw} -h ${host} -N -e "$exp"\} 2>&1)):localhost:${_dt}"
所以,我被卡住了。
答案 0 :(得分:2)
;
后{...}
组表达式中缺少"$exp"
(请参阅此documentation了解原因)。这是更正后的版本:
echo "$(grep real < <({ time mysql -u admin -p${_pw} -h ${host} -N -e "$exp"; } 2>&1)):localhost:${_dt}"
答案 1 :(得分:1)
少支撑使其更具可读性,至少对我而言。
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
中的所有信息与附加时间戳保持一致。