Bash Echo命令在while循环中意外运行

时间:2015-03-03 20:22:29

标签: mysql bash variables while-loop echo

我正在为客户清理用户数据库。我有需要访问的用户列表,并且正在检查他们是否拥有他们在删除之前创建的任何媒体。

这是一个非常简单的脚本,问题相对较小。我确定它很明显,我似乎无法弄明白。

 12    while read each;
 13     do
 14
 15          query=$(mysql -u$username -p$password $database -e "select uid,nid,title from node where uid like '$each' limit 1;")
 16          if [[ -z $query ]]
 17              then query="No nodes"
 18          fi
 19          if [[ -z $query ]]
 20              then query="Error"
 21          fi
 22     echo -n "$each"
 23     echo -n " - "
 24     echo "$query"
 25     done <$source_file

我遇到的问题在第22行。我希望源文件中的每个UID都有一行,格式如下:

UID - Query results

我遇到的问题是回显$each只有当它是该行上的唯一参数时才有效。在上面的示例中,结果如下所示:

 - Query results

(原谅引号,但如果我不引用连字符,连字符将被解释为此论坛的子弹。)

如果我将多个变量或其他任何内容放在与第一个echo命令相同的行上,则$each变量将返回空。它只显示变量的内容,如果它在它自己的行上,或者看起来如此。

更多信息:

  1. $each变量是一个整数(从文件中读取)

  2. 我解析它并不重要 - IE,如果我输入newvar="$each - $query"然后echo $newvar,则会发生同样的事情。

  3. 上面有一点误导性的评论。 echo "$each "(带有拖尾空格)覆盖$each中整数的一个数字。

  4. 如果我将echo -n "$each"行放在代码的前面(do之后但是在mysql查询之前),则数字显示在输出的底部,就像一个自动收报机磁带。这是迄今为止我最奇怪的部分,如果有帮助,我可以提供截图。

1 个答案:

答案 0 :(得分:1)

$each最后有一个CR。在使用变量之前将其剥离。