1

我正在使用具有大量 tcsh 配置脚本的系统,要求我通过 tcsh 运行大多数程序。我试图通过将其添加到我的~/.zshrc

# run command in tcsh
function t() {
    tcsh -c "$@"
}

这适用于类似的东西t ls,但失败了t ls -l,这会给出错误Unknown option: `-l' Usage: tcsh ...,并且显然-l是作为参数传递给tcsh,而不是传递给ls

如何引用传入的字符串$@

4

3 回答 3

5

Zsh 对此有一个特殊的选择(不是 bash)${(q)}

tcsh -c "${(j. .)${(q)@}}"

. 第一个 ( ${(q)@}) 转义$@数组项中具有特殊含义的所有字符,第二个 ( ${(j. .)…}) 将数组连接成一个字符串。

于 2012-12-11T18:50:44.517 回答
2

这似乎有效

function t {
  tcsh -c "$*"
}

并且比您在其他答案中找到的要短得多;-)

[编辑:]

好的,如果您真的想用引号引起反常...放弃该功能并使用别名(无论如何这可能是一个更好的主意)

alias t='tcsh -c'

[edit2:] 这是一个很好的和重点讨论在 Zsh http://zshwiki.org/home/scripting/args中引用参数的不同方法

于 2012-12-11T10:57:16.243 回答
0

这个答案有我需要的:

# run command in tcsh
function t() {
    C=''
    for i in "$@"; do
        C="$C \"${i//\"/\\\"}\""
    done;
    tcsh -c "$C"
}
于 2012-12-11T10:56:38.910 回答