【问题标题】:How can I forward bash/zsh arguments to another shell如何将 bash/zsh 参数转发到另一个 shell
【发布时间】:2012-11-28 21:53:40
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: bash quotes zsh


    【解决方案1】:

    This answer 有我需要的东西:

    # run command in tcsh
    function t() {
        C=''
        for i in "$@"; do
            C="$C \"${i//\"/\\\"}\""
        done;
        tcsh -c "$C"
    }
    

    【讨论】:

      【解决方案2】:

      这似乎有效

      function t {
        tcsh -c "$*"
      }
      

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

      [编辑:]

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

      alias t='tcsh -c'
      

      [edit2:] 这里是对在 Zsh http://zshwiki.org/home/scripting/args 中引用参数的不同方式的一个很好且切中要害的讨论

      【讨论】:

      • 谢谢! $* 做了哪些 $@ 不做的事情?
      • 没关系,this 回答了我的问题。
      • 即使对于包含空格的参数也能正常工作吗?例如t ls -l "ab cd"?
      【解决方案3】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多