在bash中嵌套引号

时间:2011-07-07 13:48:55

标签: bash escaping

我想在bash中使用这样的东西:

 alias foo='bar="$(echo hello world | grep \"hello world\")"; echo $bar;'; foo

预期输出:hello world

输出:grep:world“:没有这样的文件或目录

  • 外部引号必须是单引号,双引号$ bar将为空。

  • 下一个引号必须是双引号,单引号$()不会展开。

  • 内部引号可以是两种引号,但单引号不允许在其中引用单引号。

如何实现这一目标?

4 个答案:

答案 0 :(得分:34)

$()内的内容代表子shell,因此您可以在内部放置未转义的双引号

alias foo='bar="$(echo testing hello world | grep "hello world")"; echo "$bar"'

答案 1 :(得分:5)

有点不清楚“像这样的东西”意味着什么,但实现这里似乎重点的最简单方法是一个简单的功能:

foo() {
    echo 'hello world' | grep 'hello world'
}
foo
  • 不需要中间变量赋值(无论如何都会丢失)。
  • 函数通常比别名更受欢迎,因为它具有更大的灵活性(参数处理)和可读性(多行;更少的转义)。
  • 始终使用最简单的解决方案

答案 2 :(得分:1)

逃离空间

alias foo='bar="$(echo hello world | grep hello\ world)"; echo $bar;'

答案 3 :(得分:0)

$()周围的双引号不是必需的:

alias foo='bar=$(echo hello world | grep "hello world"); echo $bar;'
foo

# Output:
hello world