我正在使用包含大量tcsh配置脚本的系统,要求我通过tcsh运行大多数程序。我已经尝试将此添加到我的~/.zshrc
:
# run command in tcsh
function t() {
tcsh -c "$@"
}
这适用于类似t ls
的内容,但t ls -l
失败,错误Unknown option: `-l' Usage: tcsh ...
,并且明确将-l
作为参数传递给tcsh
},而不是ls
。
如何引用$@
中传递的字符串?
答案 0 :(得分:5)
Zsh有一个特殊选项(不是bash):${(q)}
:
tcsh -c "${(j. .)${(q)@}}"
。 First(${(q)@}
)转义具有特殊含义的$@
数组项中的所有字符,第二个(${(j. .)…}
)将数组连接成一个字符串。
答案 1 :(得分:2)
这似乎有效
function t {
tcsh -c "$*"
}
并且比你在其他答案中找到的要短很多; - )
[编辑:]
好吧,如果你真的想用引号歪曲......放弃这个功能,只使用一个别名(无论如何这可能是一个更好的主意)
alias t='tcsh -c'
[edit2:]以下是Zsh http://zshwiki.org/home/scripting/args
中引用参数的不同方法的优点和重点讨论答案 2 :(得分:0)
This answer有我需要的东西:
# run command in tcsh
function t() {
C=''
for i in "$@"; do
C="$C \"${i//\"/\\\"}\""
done;
tcsh -c "$C"
}