构造一个在bash中用作命令的字符串

时间:2017-10-24 07:51:07

标签: bash pipe

我想构造一个调用可执行文件的字符串,并通过一系列命令管理其输出,例如' grep',' gawk',' sed'等,例如

a=`./process t1.txt 7 | grep -v 'head' | grep -e '^42' -e '^13' | xargs | gawk '{ print $2 }' | sed 's/ /;/g'`

但是,过程'以及整个命令链仅在运行时确定。 所以我需要能够做类似

的事情
f1="'^42'"
f3="'^13'"
p=2
filterchain="grep -v 'head' | grep -e $f1 -e $f2 | xargs | gawk '{ print \$$p }' | sed 's/ /;/g'"
cmd="./process ${testfile} ${col} |  ${filterchain}"
a=`${cmd}`

但是这种方法不起作用,即使字符串$ cmd看起来与上面的字符串完全相同。

为了从bash脚本中执行这样的字符串(例如使用反引号),如何查看这样的字符串?

1 个答案:

答案 0 :(得分:2)

使用功能。

filterchain () {
  grep -v head | 
   grep -e "$1" -e "$2" |
   xargs |
   gawk -v p="$3" '{print $p}' |
   sed 's/ /;/g'
}
cmd () {
  ./process "$1" "$2" | filterchain "$3" "$4" "$5"
}
a=$(cmd "$testfile" "$col" "^42" "^13" 2)