2014-04-03 18 views
0

我試圖連接字符串,然後執行生成的字符串,但它不工作,因爲它應該,這裏是代碼:連接容易的字符串與shell出錯了?

#!/bin/bash 
    c="ls -alis" 
    c="$c | grep me" 
    echo $c 
    $c 

它打印ls -alis | grep me,但它不打印與任意文件字符串「我」在裏面,它給了我這個錯誤:

ls: |: No such file or directory 
ls: grep: No such file or directory 
ls: u1920477: No such file or directory 

但是,如果我直接鍵入ls -alis | grep me它確實表明它應該顯示我的文件的終端。這是爲什麼發生?

+2

爲[我之前評論(http://stackoverflow.com/questions/22836510/if-else-statement-in-shell-script#comment34833285_22836510),你需要'$()'執行命令。所以我想你正在尋找'c = $($ c | grep「me」)''。 – fedorqui

+0

你是對的,它的工作!但是,如果我嘗試使用'sort -k 1'來代替grep,則不會。我需要做什麼改變? –

+1

http://mywiki.wooledge.org/BashFAQ/050 – tripleee

回答

2

我想你想在這裏做eval $c。但我鼓勵你避免像這樣構建命令 - 如果你能找到更好的方式,它可能會更容易理解,也更安全。

1

字符串保存數據; shell函數保存代碼。

c() { 
    ls -alis | grep me 
}