Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Zsh Can';t编写函数来复制Bash';s';帮助';命令_Zsh_Zshrc - Fatal编程技术网

Zsh Can';t编写函数来复制Bash';s';帮助';命令

Zsh Can';t编写函数来复制Bash';s';帮助';命令,zsh,zshrc,Zsh,Zshrc,我试图在.zshrc中复制Bash的help命令。我认为这会奏效: function help { bash -c "help $@" } 但这只在我只传递一个参数时起作用——例如,help exit。当我将选项传递给help时,它不起作用,例如help-m exit(在Bash中工作)。但是,按字面意思键入bash-c“help-m exit”的效果与预期一样。我想这与在shell中引用的工作方式有关,但我无法理解这一点。您可以使用 function help { bash -c "

我试图在.zshrc中复制Bash的
help
命令。我认为这会奏效:

function help {
  bash -c "help $@"
}
但这只在我只传递一个参数时起作用——例如,
help exit
。当我将选项传递给
help
时,它不起作用,例如
help-m exit
(在Bash中工作)。但是,按字面意思键入bash-c“help-m exit”的效果与预期一样。我想这与在shell中引用的工作方式有关,但我无法理解这一点。

您可以使用

function help {
  bash -c "help $*"
}

我想您在使用zsh时需要帮助,而不是bash。Bash对zsh的内置代码和特性一无所知,而常见的内置代码差异很大,足以保证有单独的文档页面

bash的
帮助
内置的等价物是
运行帮助
,但默认情况下它不是活动的。它还将为您调用
man
,并附带一些有用的包装

TLDR;把这个放进去


自动加载-Uz运行帮助
自动加载-Uz运行帮助git
自动加载-Uz运行帮助ip
自动加载-Uz运行帮助openssl
自动加载-Uz运行帮助-p4
自动加载-Uz运行帮助sudo
自动加载-Uz运行帮助svk
自动加载-Uz运行帮助svn
别名帮助=运行帮助


谢谢,这就解决了问题。我理解为什么
$*
有效,但我真的不理解为什么
$@
无效。我可以看出在某些情况下,例如在列表上循环,
$@
$*
会有什么不同,但是,您能否解释一下,仅仅将变量放入另一个字符串中,它们的功能是如何不同的?$*返回一个带引号的字符串中传递的所有参数$@将它们作为单独的带引号的字符串返回,在您的情况下,它们作为多个参数传递给bash-最后的调用类似于bash-c“help funcarg1”“funcarg2”“funcargn”bash可能会忽略其他参数。您可以在这里阅读更多内容:
bash
不忽略其他参数<代码>$0设置为
funcarg2
$1
设置为
funcargn
。但是,您指定要运行的命令
help funcarg1
忽略了
$0
$1
的值。感谢您修复标题@dashwuff