将变量转换为shell函数

时间:2018-05-30 19:13:54

标签: bash unix

有没有办法使用shell函数接受来自bash脚本的变量(或者更确切地说,将变量传递给shell函数)?

以下过程工作正常(注意,我正在使用此过程作为我需要实现输出重定向的一部分,如here所述):

# A tibble: 14 x 5
     User Touchpoints Conversion Frequency Final_Conv
   <fctr>      <fctr>      <dbl>     <dbl>      <dbl>
 1  User1           A          0         1  0.1016868
 2  User1           B          0         2  0.2764134
 3  User1           C          0         3  0.7513695
 4  User1           F          1         0  0.0000000
 5  User1           D          0         4  0.2341217
 6  User1           E          0         5  0.6364086
 7  User1           H          1         0  0.0000000
 8  User2           A          0         1  0.3010000
 9  User2           B          0         2  0.8182029
10  User2           K          1         0  0.0000000
11  User2           D          1         0  0.0000000
12  User2           E          0         3  0.2368828
13  User2           F          0         4  0.6439143
14  User2           M          1         5  0.0000000

但是,我想提供初始文件名作为变量而不是硬编码名称,如下所示,但以下内容不起作用:

mycmd() { cat <(head -3 MyProgrammingBook.txt|awk -F "\t" '{OFS="\t"}{print "Helloworld",$0}') > outputfile.txt; }; 
export -f mycmd; 
bsub -q short "bash -c mycmd"

最终,mycmd()将在循环内调用,并且每次都会使用不同的变量。

1 个答案:

答案 0 :(得分:3)

export变量:

myinputfile="MyProgrammingBook.txt";
mycmd() { cat <(head -3 ${myinputfile}|awk -F "\t" '{OFS="\t"}{print "Helloworld",$0}') > outputfile.txt; }; 
export -f mycmd;
export myinputfile;   # Here
bsub -q short "bash -c mycmd"