我想构造一个调用可执行文件的字符串,并通过一系列命令管理其输出,例如' 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脚本中执行这样的字符串(例如使用反引号),如何查看这样的字符串?
答案 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)