【问题标题】:Displaying new line in shell variable在 shell 变量中显示新行
【发布时间】:2014-08-30 05:17:10
【问题描述】:

在执行以下脚本时:

export var1="string('\n')"

echo $var1

我得到的输出为string(n)。但我希望看到输出为:"string('\n')"

有什么办法吗?

注意:我需要将输出显示在 string('\n') 中(\n 用单引号括起来)才能在 m_wc abinitio 命令中使用该变量。

更新:感谢您的快速响应,但是当出现“\n”时,变量文本会转到下一行。输出如下:

export var='string('\''\n'\'')'
export var1="string('\\n')"
echo "$var1"
string('
')
>echo $var
string('
')

有什么办法可以完全转义 '\n' 吗?

更新: printf '%s\n' "$var1" 似乎工作正常,但我怎样才能将此值放入变量并在脚本中的任何位置使用它?

我尝试如下所示:但不起作用:

export var1="string('\n')"

export var2="printf '%s\n' "$var1""

导出 BYT_CNT=m_wc -no-commas -string $var2 /prod/users/edw/gvx770/list.dat|awk '{print $1}'

回显 $var2

回显 $var2 printf '%s ' 细绳(' ')

【问题讨论】:

  • 不要使用echo;使用printf '%s\n' "$var1"。你不知道echo 的不同版本会做什么;不同的 shell 以不同的方式处理参数中的反斜杠转义。 printf 与 POSIX 保持一致和标准化 — 可以做你想做的事。注意格式字符串 '%s\n' 周围的单引号和 "$var1" 周围的双引号;出于不同的原因,两者都是一个好主意。

标签: unix newline


【解决方案1】:

最简单的可能是:

export var1="string('\\n')"
echo "$var1"

【讨论】:

  • ...也可以在 escape sequences in UNIX shell 上查看这篇简短的文章。
  • 您好,William,感谢您的回复,但是当 '\n' 出现时,可变文本会转到下一行。输出如下: export var1="string('\\n')" >echo "$var1" string(' ') 有什么办法可以逃脱 \n 吗?
【解决方案2】:

这会做你想做的事:

export var='string('\''\n'\'')'

你需要知道的是:

  1. 除了撇号外,您可以在单引号之间添加任何内容;和
  2. 您可以在单引号或双引号之外通过在撇号前面加上反斜杠来引用它。

有了这两个规则,你可以在 shell 中引用任何东西。

或者,您可以使用双引号,但有效使用它的规则更复杂。

【讨论】:

    【解决方案3】:

    终于找到了解决这个问题的办法。代码如下:

    export dir="string('\n')"

    导出 j=$(printf "%s\n" $dir)

    导出 BYT_CNT=m_wc -no-commas -string "$j" /temp/users/list.dat | awk '{print $1}'

    回显 $BYT_CNT

    感谢大家的帮助。

    【讨论】:

      猜你喜欢
      • 2020-10-27
      • 2014-07-03
      • 1970-01-01
      • 1970-01-01
      • 2020-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多