在bash中嵌套引号

Tyi*_*ilo 13 bash escaping

我想在bash中这样的事情:

 alias foo='bar="$(echo hello world | grep \"hello world\")"; echo $bar;'; foo
Run Code Online (Sandbox Code Playgroud)

预期输出:你好世界

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

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

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

  • 内部引号可以是引号类型,但单引号不允许单引号内部引号.

我怎么做到这一点?

gle*_*man 34

里面的东西$()代表一个子shell,所以你可以在里面放置未转义的双引号

alias foo='bar="$(echo testing hello world | grep "hello world")"; echo "$bar"'
Run Code Online (Sandbox Code Playgroud)


l0b*_*0b0 5

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

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