【问题标题】:Why is my script not printing output on one line?为什么我的脚本没有在一行上打印输出?
【发布时间】:2022-01-26 06:01:48
【问题描述】:

This is an image of what I'm asking for 我在一个脚本中使用了以下-echo-,执行后输出格式如下图:

`echo -e "UPDATE table1 SET table1_f1='$Fname' ,table1_f2='$Lname' where table1_f3='$id';\ncommit;" >> $OutputFile` 

输出:UPDATE table1 SET table1_f1='Fname' ,table1_f2='Lname' where table1_f3='id '; '; 出现在新行上,为什么会这样?

【问题讨论】:

  • stackoverflow.com/a/20233998/2955337 ;被视为命令字符的结束。用反斜杠转义它
  • 你能澄清一下问题和来源吗?我认为有些丢失或与 SO 格式冲突。你说的;在下一行,这里根本没有显示。不清楚(对我来说)第一个反引号字符是否是脚本行的一部分,因为该字符在脚本和 SO 中都有特殊含义。另外,通过“脚本上的回声”,我想您的意思是“脚本内的回声”
  • @sleepyhead 在带引号的字符串中,不需要转义。
  • 我怀疑问题是$id 包含换行符。
  • @Raxi 我提供了问题的屏幕截图,是的,在脚本中回显

标签: sql bash shell sh script


【解决方案1】:

你的 shell 脚本中的变量 $id 实际上在末尾包含换行符(\n\r\n);因此,您在此处显示的脚本部分没有任何问题。

如果变量是基于外部命令(更新:)或通过reading 外部文件创建的,这种效果很常见。

对于简单的值,在您的 echo 中使用它之前,将换行符从值的末尾去除的一种方法是:

id=$( echo "${id}" | tr -s '\r' '' | tr -s '\n' '' );

或者对于已经依赖特定 bash IFS 值的脚本:

OLDIFS="${IFS}"; 
IFS=$'\n\t '; 
id=$( echo "${id}" | tr -s '\r' '' | tr -s '\n' '' );
IFS="${OLDIFS}";

【讨论】:

  • 我尝试设置IFS=$'\n';,但问题仍然存在。
  • 这就是我定义id 变量的方式:while IFS='|'; read Fname Lname id 它从输入文件中获取它的值
  • 输入看起来都像A|B|C 吗?或者可以有更多|
  • 并尝试:while IFS=$'\n|'; read Fname Lname id
  • 它是A|B|C,我在每个值之间使用一个管道
猜你喜欢
  • 2020-03-21
  • 1970-01-01
  • 2021-12-24
  • 2021-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-05
  • 2022-08-18
相关资源
最近更新 更多