我想创建一个可以使用if-else case并调整命令的函数。 (实际上我想用!)
function test_funct(){
cmd="grep thisword file"
[[ $1 == not ]] && cmd="! $cmd"
$cmd
}
test_funct not
然后出现了: ./test:第4行:!:命令未找到
任何想法?
答案 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”的情况下,这可能有用。但我可以清楚地看到,您的目标是接受用户输入以选择文件或更改搜索的单词。
请不要那样做。这是完全错误的。