2011-07-07 44 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