gal*_*ica -1 bash shell arguments
我有一个问题,如何\t在Bash中传递带有特殊字符的参数.
我知道以下内容以保留引号:
function my_grep {
cmd="grep '$@'"
eval $cmd;
}
Run Code Online (Sandbox Code Playgroud)
这样我才能做到my_grep "hello world".
但似乎我不能以这种方式保存,例如
my_grep "hello\tworld"
Run Code Online (Sandbox Code Playgroud)
关于如何使这项工作的任何想法?
解决方案很简单:不要将命令存储在变量中!请参阅BashFAQ#50:我正在尝试将命令放在变量中,但复杂的情况总是会失败!.另外,不要使用eval; 它会导致各种奇怪的问题.如果你跳过这些(并"$@"正确使用),问题就会消失:
my_grep() {
grep "$@"
}
Run Code Online (Sandbox Code Playgroud)
请注意,如果您使用my_grep "hello\tworld"它来调用它,它实际上并不传递制表符,它会传递一个反斜杠后跟字母"t" - 其中某些实现grep解释为匹配制表符.如果您的版本grep没有这样做,您可以传递一个实际的选项卡my_grep $'hello\tworld'.