2013-03-26 73 views
0

我試圖從一個函數使用sed的參數如下。 如果找到'a',則在'a'之前插入#然後將'a'附加到下一行。 parama與paramb具有相同的內容,但我不明白爲什麼帶paramb的sed命令失敗。 它似乎從函數返回的換行符被修剪? 錯誤消息是「sed:-e表達式#1,字符6:未終止的'命令」來自函數的sed參數?

請幫忙,謝謝。

parama="-e s/a/#&\n&/g" 
echo "a" | sed $parama 


test(){ 
    echo "-e s/a/#&\n&/g" 
} 

paramb=$(test) 

echo "a" | sed $paramb 
+0

因爲它是一個保留字,所以你不能在'bash'中像這樣定義一個叫'function'的函數。 – chepner 2013-03-26 17:11:44

回答

0

我想,你應該做的是這樣的:

parama="-e s/a/#&\n&/g" 
echo "a" | sed $parama 


function test(){ 
    echo "-e s/a/#&\n&/g"; 
} 

paramb=$(test); 

echo "a" | sed $paramb 

你不命名你的函數,我已經把它命名爲test.Output我越來越:

$ ./testso2.sh 
#a 
a 
#a 
a 
+0

謝謝,但它是函數名稱的問題,它也以「test」作爲函數名稱失敗。 – timchen 2013-03-26 17:33:53

+0

@timchen你期待什麼輸出? – 2013-03-26 17:44:56

+0

「功能」一詞在括號中是多餘的。 – Scrutinizer 2013-03-26 17:52:39

0

它看起來像一個shell的問題,我的腳本運行得很好,但不是/ bin/sh,它實際上是/ bin/dash。我的問題現在已修復。謝謝。

0

我無法重現差異。這可能是因爲你的echo碰巧解釋了\n。嘗試:

printf "%s\n" "-e s/a/#&\n&/g"