我正在尝试使用 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[@]}"
将数组扩展到其各个元素,再次形成命令调用。