如何在 zsh 中的函数变量上存储带有选项的命令?

如何在 zsh 中的函数变量上存储带有选项的命令?

我正在尝试使用 bash 脚本学习YouTube 上的 freeCodeCamp 初学者教程

我被困在他展示如何创建函数的地方。他在变量上保存了带有选项的命令

#!/bin/bash

showuptime(){
    up=$(uptime -p | cut -c4-)
    since=$(uptime -s)
    cat << EOF

----------
This machine has been up for ${up}
It has been running since ${since}
----------

EOF
}

showuptime

我无法在终端上使用 zsh 在 MacBook M1 上进行复制。

我正在使用#!/bin/zsh ,并且仅当我不传递 -p 和 -s 选项时它才有效。

错误:

uptime: illegal option -- p
usage: uptime
uptime: illegal option -- s
usage: uptime

答案1

澄清一些事情:

  • 作为变量您宁愿指示传递给函数的参数(此处没有)的函数,这些参数可通过$1$2等访问。
  • 你所拥有的都是变量您的功能,并且因为它们没有标记,所以local它们甚至不限于该功能。
  • $( )构造称为命令替换。它不以任何方式存储命令,而是执行其中的内容(uptime -p | cut -c4-在第一种情况下)并将命令生成的输出分配给变量。uptime此时命令被执行。存储的是命令输出,而不是命令。
  • 正如马库斯提到的,错误来自于uptime不支持这些选项的命令。由于 Mac OS 与 BSD 相关,因此 FreeBSD手册页uptime可以给一个方向。在 FreeBSD 上uptime根本不接受任何选项,对于 Mac OS 可能也是如此。
  • 回答问题标题:存储带有选项的命令的最佳方法是使用数组。my_stored_command=(ls -lt --human-readable /home)然后可以稍后运行,"${my_stored_command[@]}"将数组扩展到其各个元素,再次形成命令调用。

相关内容