使用 bash 安装多个包

Sto*_*ord 4 command-line apt bash

众所周知,我们用来安装多个软件包的命令是:

apt install package1 package2 package3`
Run Code Online (Sandbox Code Playgroud)

在 Bash 脚本中使用以下方法:

packages="package1 package2 package3"
apt install "$packages"
Run Code Online (Sandbox Code Playgroud)

产生错误,指出无法找到该包。因此这是不正确的。

以下命令是否apt为每个包运行一次,或者它的工作方式是否不同?

apt install $(cat $packageFile)
Run Code Online (Sandbox Code Playgroud)

假设packageFile是一个文本文件,其中每行包含一个包名称。

我知道我可以使用一个数组并将所有包名称放入其中,然后使用for循环为每个包运行apt一次,但我想知道是否有一种方法可以使用 Bash 脚本安装所有包,apt仅运行一次。

谢谢。

Lor*_*eel 7

使用数组的方法是正确的,但您需要正确定义数组。这意味着您需要使用复合语句(即圆括号)而不是双引号。\n事实上,您的命令首先不起作用的原因是因为它$packages被 shell 扩展,package1 package2 package3然后被读取为单个字符串 by apt,而不是单独的 as package1,package2 , package3

\n

因此,使用以下形式的复合赋值来定义数组:

\n
packages=(package1 package2 package3)\n
Run Code Online (Sandbox Code Playgroud)\n

然后使用以下命令安装所有软件包:

\n
sudo apt install "${packages[@]}"\n
Run Code Online (Sandbox Code Playgroud)\n

事实上,数组的任何元素都可以使用 , 来引用${array_name[index]},并且当索引为@,该单词将扩展到数组名称的所有成员。需要使用大括号以避免与 shell\xe2\x80\x99s 文件名扩展运算符发生冲突。

\n