2017-08-15 33 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内置命令用于

替换与给定程序的壳(执行它,而不是作为新过程) 集合重定向为要执行的程序或当前壳