众所周知,我们用来安装多个软件包的命令是:
apt install package1 package2 package3`
在 Bash 脚本中使用以下方法:
packages="package1 package2 package3"
apt install "$packages"
产生错误,指出无法找到该包。因此这是不正确的。
以下命令是否apt
为每个包运行一次,或者它的工作方式是否不同?
apt install $(cat $packageFile)
假设packageFile是一个文本文件,其中每行包含一个包名称。
我知道我可以使用一个数组并将所有包名称放入其中,然后使用for循环为每个包运行apt
一次,但我想知道是否有一种方法可以使用 Bash 脚本安装所有包,apt
仅运行一次。
谢谢。
使用数组的方法是正确的,但您需要正确定义数组。这意味着您需要使用复合语句(即圆括号)而不是双引号。事实上,您的命令首先不起作用的原因是因为它
$packages
被 shell 扩展,package1 package2 package3
然后由 读取为单个字符串apt
,而不是单独读取为package1
,package2
,package3
。因此,使用以下形式的复合赋值来定义数组:
然后使用以下命令安装所有软件包:
事实上,数组的任何元素都可以使用 来引用
${array_name[index]}
,并且当索引为 时@
,该单词将扩展到数组名称的所有成员。需要使用大括号以避免与 shell 的文件名扩展运算符发生冲突。