2017-08-15 35 views
0

另請參閱我的previous question。 所以...我有一個劇本:調用bash函數時擴展變量不起作用

function go_loop(){ 
for i in `grep -v ^# $1`; do 
     $2 
done 
} 

go_loop "/tmp/text.txt" "echo $i" 

我應該有一個結果:

9 
20 
21 
... 

但顯然我只得到一個空的結果。如何將第二個輸入參數提供給循環? 請不要建議我這樣做:

for i in `grep -v ^# $1`; do 
     echo $i 
done 

我需要2個輸入參數,第一個文件 - 文件名,第二個 - 執行命令的名稱

+0

如果你措辭了您的問題,更精確它不會被downvoted。 – yacc

回答

0

您需要EVAL第二個參數是這樣的:

eval $2 

,並通過這樣的:

go_loop "/tmp/text.txt" 'echo $i' 
+0

不錯。謝謝。它適用於我 – Piduna

+0

當然,不客氣 – yacc

0

爲此,您可以使用您的exec循環內,這將運行$2作爲bash命令:

[[email protected] ~]# ./test.sh 1 ls 
test.sh tests_passed.txt 
[[email protected] ~]# cat test 
exec $2 

EXEC內置命令用於

替換與給定程序的殼(執行它,而不是作爲新過程) 集合重定向爲要執行的程序或當前殼