调用bash函数时,扩展变量不起作用

时间:2017-08-15 11:54:46

标签: bash shell for-loop

另请参阅我的previous question。 所以......我有一个剧本:

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个参数,第一个是文件名,第二个是执行命令名

2 个答案:

答案 0 :(得分:0)

您可以使用循环内的exec来执行此操作,这将以$2作为bash命令运行:

[root@box ~]# ./test.sh 1 ls
test.sh  tests_passed.txt
[root@box ~]# cat test
exec $2

exec 内置命令用于

用给定的程序替换shell(执行它,而不是作为新进程) 设置要执行的程序或当前shell的重定向

答案 1 :(得分:0)

你需要像这样评估第二个参数:

"substring"(my_table.url, '.*app/([^/]*)'::text)

并像这样传递:

BEGIN;
UPDATE my_table SET group_id = "substring"(my_table.url, '.*app/([^/]*)'::text);
COMMIT;