首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在bash here-string中扩展具有特殊含义的字符

在bash here-string中扩展具有特殊含义的字符
EN

Stack Overflow用户
提问于 2012-09-21 15:52:11
回答 5查看 254关注 0票数 1

代码如下:

代码语言:javascript
复制
#!/bin/bash

wd1="hello"
wd2="world"

cat >> log.txt <<<"$wd1\t$wd2\n\n"

当我运行上面的脚本时,'\t','\n'根本没有展开。所以我把它改成这样:

代码语言:javascript
复制
cat >> log.txt <<<$(echo -e "$wd1\t$wd2\n\n")

但是'\t','\n'仍然没有扩展。为什么?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-09-21 18:07:32

来自info bash

代码语言:javascript
复制
3.6.7 Here Strings
------------------

A variant of here documents, the format is:
     <<< WORD

   The WORD is expanded and supplied to the command on its standard
input.

  1. <<<"$wd1\t$wd2\n\n"受到bash扩展的影响,但没有用于\t\n的标准扩展。这就是为什么它不happen.
  2. <<<$(echo -e "$wd1\t$wd2\n\n")不工作,因为它是无引号的。echo会输出特殊字符,但随后会进行字段拆分,并将其替换为空格。

你只需要引用它:

代码语言:javascript
复制
cat >> log.txt <<<"$(echo -e "$wd1\t$wd2\n\n")"
票数 2
EN

Stack Overflow用户

发布于 2012-09-21 20:30:40

Bash支持另一种类型的引号,它确实扩展了某些转义字符:

代码语言:javascript
复制
word=$'foo\nbar'
echo "$word"

不幸的是,这样的带引号的字符串不会进行参数扩展:

代码语言:javascript
复制
word=$'$w1'
echo "$word"

如果您使用的是bash 4或更高版本,则可以使用printf设置变量的值:

代码语言:javascript
复制
printf -v word "$wd1\t$wd2\n\n"
cat >> log.txt <<<"$word"
票数 1
EN

Stack Overflow用户

发布于 2012-09-21 15:59:29

我更愿意使用(没有此处的字符串):

代码语言:javascript
复制
echo -e "$wd1\t$wd2\n\n" >> log.txt
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12526364

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档