剧本是这样的
#!/bin/bash
echo
echo "################################################################"
echo " Installing Htop "
echo "################################################################"
echo
if ! location=$(type -p "htop"); then
sudo apt install -y htop
fi对于脚本中的这个代码片段对location=$(type -p "htop");有什么影响,我感到困惑,我需要对此做一个明确的解释。
发布于 2022-12-02 20:52:35
!否定以下command;location=...的退出状态,为变量$location;$(...) is 命令替换分配一个值。它扩展到封闭命令的输出,该命令的退出状态被传播为赋值的退出status;type -p htop (此处不需要双引号)在$PATH中搜索可执行htop并返回到它的完整路径。如果不存在这样的可执行文件,并且没有别名或名为htop的函数(在这种情况下,它返回一个空字符串,但没有失败),它就会失败。综合起来,它搜索一个名为htop的可执行文件,分析到$location的完整路径,如果找不到它(并且没有别名或函数定义它),它运行sudo apt install -y htop,在某些系统上(使用apt管理包)尝试以根权限安装htop包,回答yes的任何问题。
发布于 2022-12-02 20:53:11
简而言之,赋值的退出状态是命令替换的退出状态,命令替换的退出状态是type的退出状态。
如果type -p htop是一个可以执行的命令,则htop的退出状态为0,输出是该命令的完整路径。
这里的想法是,如果location存在,则为它分配到htop的完整路径,如果不存在,则运行sudo apt install -y htop来安装它。(注释中提到的一个小问题是,如果需要安装location,那么htop仍然存在。)
https://stackoverflow.com/questions/74661270
复制相似问题