如何将bash / zsh参数转发给另一个shell

时间:2012-12-11 10:49:04

标签: bash quotes zsh

我正在使用包含大量tcsh配置脚本的系统,要求我通过tcsh运行大多数程序。我已经尝试将此添加到我的~/.zshrc

,以便让自己轻松自如
# run command in tcsh
function t() {
    tcsh -c "$@"
}

这适用于类似t ls的内容,但t ls -l失败,错误Unknown option: `-l' Usage: tcsh ...,并且明确将-l作为参数传递给tcsh },而不是ls

如何引用$@中传递的字符串?

3 个答案:

答案 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"
}