この関数内で正しい変数置換、特に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')"
私はエラーメッセージを見ているとして:あなたはecho "$(...)
この機能outputOFF()
内にある見ることができるように
./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 "$(grep real < <(\{ time mysql -u admin -p${_pw} -h ${host} -N -e "$exp"\} 2>&1)):localhost:${_dt}"
私は立ち往生しています。
'' $ exp "'の最初の引用符は、文字列を終了します。したがって、$ expの内容はシェルの評価にさらされます。あなたのために幸せに、いくつかのグループ化はそれを防ぎます。しかし、私はその構造を信じていません。 'time mysql ... | grep real'は書いて理解しやすくなります。 – ULick
@ULick、コマンド置換は引用符を含むことができます(そしてその中の変数を正確に引用する必要があります)。だから、 '" $ exp' "の引用符は引用を終了しません。その全体の構造はまだ少し複雑すぎるように見えます。 – ilkkachu
あなたがよりシンプルで読みやすい構造を持っていれば、私はそれを見たいと思うでしょう。ありがとうございました。 – noober