将命令分配给Zsh中的变量

将命令分配给Zsh中的变量,zsh,Zsh,我最近切换到了Zsh,我有一些配置shell文件要加载到Zsh中。但是,Zsh似乎不允许通过字符串将命令赋值给变量 什么过去有用 本地git_conf='git config-global' $git_conf rebase.autosquash true 在Bash中,上面的操作很好。但在Zsh中,它会打印出: command not found: git config --global 如果我只是将整个命令写在同一个文件中,它就可以工作,但是如果我将一个部分命令赋给一个变量,它就不能工作。

我最近切换到了Zsh,我有一些配置shell文件要加载到Zsh中。但是,Zsh似乎不允许通过字符串将命令赋值给变量

什么过去有用 本地git_conf='git config-global' $git_conf rebase.autosquash true 在Bash中,上面的操作很好。但在Zsh中,它会打印出:

command not found: git config --global
如果我只是将整个命令写在同一个文件中,它就可以工作,但是如果我将一个部分命令赋给一个变量,它就不能工作。有办法解决这个问题吗


谢谢,

这实际上已经得到了回答。在我和谷歌进行尽职调查之前,我提前问了一下。所以我会在下面给出我的答案

解决方案 使用eval功能将起作用。但这不是最佳做法。为了获得最佳实践,我使用了一个shell函数

在我的例子中,我有很多重复的配置,这些配置简化了一些输入,因此没有那么冗长。在本例中,考虑到每个配置都有一个唯一的键,我进一步选择了配置的关联数组

声明-A会议 交谈= rebase.AUTOSQUSH true 别名。a'!ga{ 如果[$-等式0];则 git添加。 其他的 git添加$@ fi }; ga' 对于${kvconfs}中的键值 做 这是可行的,但我希望尽可能远离eval command=始终相同${key}${value}的特定命令 eval${command} 最佳做法 git_config${key}${value} 完成 git_配置{ git配置-全局$@ }
这其实已经得到了回答。在我和谷歌进行尽职调查之前,我提前问了一下。所以我会在下面给出我的答案

解决方案 使用eval功能将起作用。但这不是最佳做法。为了获得最佳实践,我使用了一个shell函数

在我的例子中,我有很多重复的配置,这些配置简化了一些输入,因此没有那么冗长。在本例中,考虑到每个配置都有一个唯一的键,我进一步选择了配置的关联数组

声明-A会议 交谈= rebase.AUTOSQUSH true 别名。a'!ga{ 如果[$-等式0];则 git添加。 其他的 git添加$@ fi }; ga' 对于${kvconfs}中的键值 做 这是可行的,但我希望尽可能远离eval command=始终相同${key}${value}的特定命令 eval${command} 最佳做法 git_config${key}${value} 完成 git_配置{ git配置-全局$@ }
您希望shell在空格上拆分您的命令。因此,您必须将其作为

${(z)git_conf} rebase.autosquash true

当然,这是对shell变量的误用,适用于如此简单的情况。我想知道为什么在这里使用shell变量,而不是shell函数。即使使用数组变量也会更灵活。

您希望shell在空格上拆分您的命令。因此,您必须将其作为

${(z)git_conf} rebase.autosquash true
当然,这是对shell变量的误用,适用于如此简单的情况。我想知道为什么在这里使用shell变量,而不是shell函数。即使使用数组变量也会更加灵活。

您还可以执行以下操作:

local git_conf=(git config --global)
"$git_conf[@]" rebase.autosquash true
您还可以执行以下操作:

local git_conf=(git config --global)
"$git_conf[@]" rebase.autosquash true

@zedfoxus-这绝对是。我也发现了。我问得有点早,谷歌没有给我最好的结果,当我第一次遇到这个问题。最妙的是,在Zsh中,我可以循环通过一个字符串数组来分配这些配置。非常感谢。现在,如果它可以分配git函数:git config-global alias.coo'!那太棒了,太棒了。我相信你会找到一种让你的工作流程令人惊叹的方法:@zedfoxus-当然,我会为其他人更新这个答案,以防他们先碰到我的。希望您的工作流程令人惊叹!:关于eval在bash中是邪恶的,请参见。安全使用当然是可能的,但要小心一点。@zedfoxus-这绝对是。我也发现了。我问得有点早,谷歌没有给我最好的结果,当我第一次遇到这个问题。最妙的是,在Zsh中,我可以循环通过一个字符串数组来分配这些配置。非常感谢。现在,如果它可以分配git函数:git config-global alias.coo'!那太棒了,太棒了。我相信你会找到一种让你的工作流程令人惊叹的方法:@zedfoxus-当然,我会为其他人更新这个答案,以防他们先碰到我的。希望您的工作流程令人惊叹!:关于eval在bash中是邪恶的,请参见。它当然可以安全地使用,但需要注意。在评论部分,有人告诉我使用shell函数是最佳实践。我改变了我的答案,以反映最佳实践。好吧,如果你也可以用自行车运输葡萄酒,那么不要使用卡车。当然,我们试图避免使用参数扩展来扩展到包含参数的完整命令,但是
uestion是有效的,因为在某些情况下,函数确实不能让您更进一步。实际上,如果您使用函数来代替,那么如果您可以将其转换为单独的脚本,那么还可以使其更加灵活。函数只能在定义它的zsh进程中执行,而脚本可以在任何地方运行。在评论部分,我被告知使用shell函数是最佳实践。我改变了我的答案,以反映最佳实践。好吧,如果你也可以用自行车运输葡萄酒,那么不要使用卡车。当然,我们试图避免使用参数扩展来扩展到包含参数的完整命令,但您最初的问题是有效的,因为在某些情况下,函数确实无法让您更进一步。实际上,如果您使用函数来代替,那么如果您可以将其转换为单独的脚本,那么还可以使其更加灵活。函数只能在定义它的zsh进程中执行,而脚本可以在任何地方运行。