将不完整的命令分配给变量/ bash

时间:2014-02-02 15:04:01

标签: bash shell

我坚持使用一个相当愚蠢的bash脚本:

CMD="get database" /   #embedded,specific platform command
DATA="tree path Uo5 Uu7"

custom_command='grep -i Arte | awk -F '[:]' '{print $2}'

这就是我想要做的事情:

VAR=`$CMD "show data $DATA" | $custom_command`   <--not working
VAR=`$CMD "show data $DATA" | grep -i Arte | awk -F '[:]' '{print $2}'` <--working

使用$ custom_command会破坏脚本。我如何使用$ custom_command到VAR?

我使用custom_command来避免反复使用相同的字符串。你能帮忙吗?

3 个答案:

答案 0 :(得分:3)

您不希望将命令分配给bash中的变量。你想写函数。

custom_command() {
    grep -i Arte | awk -F '[:]' '{print $2}'   
}

答案 1 :(得分:0)

你可以这样做:

custom_command="awk -F':' '/Arte/ {print \$2}'"
var=$(eval "$CMD 'show data $DATA' | $custom_command")

或者没有eval

custom_command="/Arte/ {print \$2}"
var=$("$CMD" 'show data $DATA' | awk -F':' "$custom_command")
  • 您实际上并未向grep命令提供任何输入文件/数据
  • 然而,由于awk可以处理搜索部分
  • ,因此不需要grep

答案 2 :(得分:0)

你需要做eval。类似的东西:

FINAL_CMD="$CMD show data $DATA | $custom_command"
VAR=$(eval $FINAL_CMD)

或者为了使其更适合您的问题,请尝试:

VAR=`$CMD "show data $DATA" | eval $custom_command`