2011-07-07 41 views
12

我想这样的事情在bash:嵌套报价

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

预期输出:你好世界

输出继电器:grep的:世界“:没有这样的文件或目录

  • 外引号必须是单引号,双引号$ bar应该是空的。

  • T他接下来的引号必须是双引号,单引号$()不会扩展。

  • 内部引号可以是两种类型的引号,但单引号不允许单引号内部。

如何实现此目的?

回答

32

$()的东西,代表一个子shell,所以你被允许放在里面

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

逃生的空间

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

是否非转义双引号不可能逃避报价,说我想做:'别名foo ='baz =“hello world”; bar =“$(echo hello world | grep \”$ baz \“)”; echo $ bar;'; foo' – Tyilo

5

这是一个有点不清楚是什么“这样的事情”的意思,但要实现什么似乎是这里的点最简单的方法是一个简单的函数:

foo() { 
    echo 'hello world' | grep 'hello world' 
} 
foo 
  • 不需要中间变量赋值(它将会丢失)。
  • 由于更灵活(参数处理)和可读性(多行;更少转义),函数通常优于别名。
  • 总是使用最简单的解决方案,可能工作
0

各地$()双引号是没有必要的:

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

# Output: 
hello world