有这样的剧本:
#! /bin/bash
typeset -i i END
let END=500 i=1
remainder=1
accum="use yola_test;\n"
for ((i=1;i<=END;++i)); do
# str1=$( echo "$i" | md5sum | md5sum )
title="title_$i"
# "${str1:2:20}"
accum="${accum}CALL add_new_enterprise(\"$title\");\n"
let "remainder=$i % 100"
if [ $remainder -eq 0 ]; then
accum="${accum}SELECT count(*) as \`enterprises:\` FROM enterprise;\n"
mysql --host=l --port=0 --user=r --password='!' --execute="$accum"
accum="use yola_test;\n"
fi
done
但是对于每一个\ n它给我“寻呼机设置为stdout”,我可以避免这种情况,我知道当它回应时我必须使用-e选项,但我读了一些关于ANSI-C引用的材料,但是没有其他例子如何使用它。
我试过这样做
mysql --host=l --port=0 --user=r --password='!' --execute="$( echo -e "$accum" )"
但它没有效果,我认为调用echo会增加运行时间。
答案 0 :(得分:3)
@ pgl的答案是这种情况的最佳方法,但如果你确实需要在一个变量值中嵌入换行符,最简单的方法就是使用bash的$'...'
引用形式:
accum=$'use yola_test;\n'
...
accum="${accum}CALL add_new_enterprise(\"$title\");"$'\n'
...etc
请注意,上面的第二个示例使用了多种引用类型;第一部分的双引号允许变量插值,然后$'...'
表示需要转义序列解释的部分。
nl=$'\n'
accum="use yola_test;${nl}"
...
accum="${accum}CALL add_new_enterprise(\"$title\");${nl}"
...etc
答案 1 :(得分:2)
“PAGER设置为stdout”来自MySQL - 要停止显示,只需从代码中删除\ n的实例;你不需要它们。