Shell 在alias中使用其他命令

Shell 在alias中使用其他命令,shell,alias,zsh,Shell,Alias,Zsh,运行此命令时,不是提交命令的时间,而是打印source~/.zshrctime ~/.zshrc: alias gitCommitAll="git add . && git commit -m \"`date +\"%T\"`\"" 例如 source~/.zshrc10:00时 gitCommitAll在10:10=>gitcommit-m“10:00”不是10:10尝试以下操作: alias gitCommitAll='git add . && git co

运行此命令时,不是提交命令的时间,而是打印
source~/.zshrc
time

~/.zshrc:

alias gitCommitAll="git add . && git commit -m \"`date +\"%T\"`\""
例如

source~/.zshrc
10:00时
gitCommitAll
在10:10=>
gitcommit-m“10:00”
不是10:10

尝试以下操作:

alias gitCommitAll='git add . && git commit -m "`date +%T`"'

双引号(
)中的反引号(``')将提前执行。尝试改用单引号(
'
)。

不要使用别名;改用函数。它使引用变得容易得多。差不多

gitCommitAll () {
  git add . && git commit -m "$(date +%T) $1"
}

如何处理函数的参数取决于别名的用途。看起来您的意思是让所有(或至少第一个)“参数”都成为
-m
选项的一部分,因为时间本身并不是一条提交消息。上面只包含第一个参数作为消息的一部分。

这是可行的,但它远不如“改用函数”(freenode#bash通道通常是这样回答别名误用问题的——我认为这是正确的)。可能会切换到
提交-m“$(日期+%T)$@
。将它放在字符串末尾的引号中意味着第一个参数将被追加到字符串中,随后的参数将分别传递给
commit
。。。这看起来是对的。(在bash中,我对zsh的了解还不足以理解其中的语义)。我了解了这一点,然后我更仔细地查看了原始版本,并意识到别名的任何“参数”都将作为
-m
选项的一部分(仅一次并不算提交消息)。也许
-m“$(日期+%T)$1”“${@:2}”
是你想要的?那么也许你想要
$*
而不是
$1
;抛开第一个论点不谈似乎是不对的。