当前位置: 首页 > 面试题库 >

将命令输出存储到bash中的变量时,如何保留换行符?

公孙阳文
2023-03-14
问题内容

我在Linux上使用bash shell。我有这个简单的脚本……

#!/bin/bash

TEMP=`sed -n '/'"Starting deployment of"'/,/'"Failed to start context"'/p' "/usr/java/jboss/standalone/log/server.log" | tac | awk '/'"Starting deployment of"'/ {print;exit} 1' | tac`
echo $TEMP

但是,当我运行此脚本时

./temp.sh

打印所有输出而没有回车/换行。不知道这是我将输出存储到$ TEMP还是echo命令本身的方式。

如何将命令的输出存储到变量并保留换行符/回车符?


问题答案:

引用 您的变量。原因如下:

$ f="fafafda
> adffd
> adfadf
> adfafd
> afd"



$ echo $f
fafafda adffd adfadf adfafd afd



$ echo "$f"
fafafda
adffd
adfadf
adfafd
afd

不带引号的外壳将替换$TEMP为其包含的字符(其中之一是换行符)。然后,在调用echoshell 之前,先使用Internal Field Separator(IFS)将该字符串拆分为多个参数,然后将所得的参数列表传递给echo。默认情况下,IFS设置为空白(空格,制表符和换行符),因此Shell将您的$TEMP字符串切成参数,并且永远也看不到换行符,因为Shell会将其视为分隔符,就像空格一样。



 类似资料:
  • 问题内容: 我想要的是将git命令的输出(例如git status)存储在shell脚本的变量内。当我说输出时,我说的是在终端上执行命令时返回的文本,例如:在回购之外执行git status时: 我尝试了这个: 但是’var’没有存储任何东西。 问题答案: 您可以使用: 即将stderr重定向到stdout,然后捕获输出。 否则,当会写上错误消息并且您的命令:仅正在捕获时。

  • 问题内容: 将从大型文本文件提取的列表中返回最大的列表,但是如何将输出存储为变量? 问题答案: 使用命令替换: 另外,出于可移植性考虑,我建议始终将用作参数。我遇到了一些无法使用的化身。

  • 问题内容: 我在JavaScript中有以下代码: PHP代码:- 注意:我不希望在表单提交中使用它。我在JavaScript中有一些逻辑,我想在同一PHP页面中使用它…请让我知道我该怎么做。 问题答案: 您必须记住,如果JS和PHP位于同一个文档中,则将首先在服务器上执行PHP,然后在浏览器上执行JS,并且两者将永远不会交互(除非您在哪里用PHP输出JS,这实际上不是两个引擎之间的交互)。 考虑

  • 问题内容: 我必须找到具有选定权限的文件,并列出它们及其编号。因此,我想将命令的结果传递给shell和下一个命令,该输出我想存储在变量中,以便以后可以很好地显示。我想吃点东西 但部分无效。请帮忙。 编辑 我知道我可以将命令的整个输出放到像这样的变量中 但是然后我只需要的结果。我如何从该变量中获得该数字?是否可以按相反的顺序显示它,先显示编号,然后显示列表? 问题答案: 复制到TTY(不是标准输出!

  • 问题内容: 我正在尝试将命令输出重定向到变量: 然后阅读: 运行它时,输出如下: 但是变量保持空白。对于其他命令,我已经尝试过相同的方法,并且一切正常。 这会将文件列表写入变量,以便以后可以读取。我应该怎么做才能使其正常工作? 问题答案: 也许输出去了,不是吗? 尝试这个:

  • 问题内容: 在MS SQL 2008R2上,我希望能够将消息输出捕获到变量中。我需要在许多数据库上运行脚本。捕获消息输出(来自print或raiserror的消息)并将其记录到表中。我需要从存储过程中执行此操作。 对于此脚本 我想得到 或者 更新 我决定接受@rs建议。对我来说,登录表格是最简单的方法。使用SP进行日志记录(以保持代码干净),再加上一个小的正则表达式来重构我的所有脚本。该解决方案将