我们怎样才能提升!在一个命令作为变量?

时间:2016-03-19 19:21:12

标签: bash function

我想创建一个可以使用if-else case并调整命令的函数。 (实际上我想用!)

function test_funct(){
cmd="grep thisword file"
[[ $1 == not ]] && cmd="! $cmd"
$cmd
}

test_funct not

然后出现了: ./test:第4行:!:命令未找到

任何想法?

1 个答案:

答案 0 :(得分:1)

!的解析在命令行解析过程中很早就发生了 当然,它不会在“参数扩展”之后执行“$ cmd”扩展。

shell不会将其视为否定运算符。

你可以这样工作:

function test_funct(){
    cmd="grep thisword file"
    [[ "$1" == "not" ]] && cmd="! $cmd"
    eval "$cmd"
}

test_funct not

但是使用eval(除非你自己在脚本中设置了每个部分的evaled字符串)是一个引入错误和问题的途径。

cmd包含字符串“grep thisword file”的情况下,这可能有用。但我可以清楚地看到,您的目标是接受用户输入以选择文件或更改搜索的单词。

请不要那样做。这是完全错误的。