bash 脚本:将参数传递给 mkfs

bash 脚本:将参数传递给 mkfs

我正在编写一个 bash 脚本来格式化我的分区。我想要运行的命令之一如下:

mkfs.btrfs -f -m single -L root /dev/sda1

因此我将该命令拆分为选项部分:-f -m single -L root 和分区部分:/dev/sda1 并将它们放入如下变量中:

mkfs.btrfs "${myoptions}" /dev/"${mypartition}"

但失败了:

mkfs.btrfs: invalid option -- ´ ´

我尝试了不同的方法,比如将两部分放在双引号中,但都失败了。我还尝试将这两部分放入一个数组中,然后像这样运行它:

mkfs.btrfs "${array[1]}" "${array[2]}"

或者像这样:

mkfs.btrfs "${array[*]}"

但它也会失败。

如果我不使用选项部分来运行它,它就会起作用,所以我猜测问题出在两个参数之间的空格,但我不知道如何解决它。

答案1

我也尝试将这两部分放入一个数组中......

还不够好。每一个争论必须是数组的一个元素(或变量中的唯一值)。

args1=(-f -m single -L root)
args2=/dev/"$mypartition"
mkfs.btrfs "${args1[@]}" "$args2"

答案2

这种事情对我来说总是非常痛苦。在这种情况下,由于您的所有参数本身都没有空格,我会尝试删除双引号并让 Bash 将其分解为您的$myoptions变量的单词。所以这样:

mkfs.btrfs ${myoptions} /dev/"${mypartition}"

使用双引号,您将获得一个-f -m single -L root包含空格的字段。如果没有它,它将被分解为单个字段-f -m single -L,并显示与在交互式 shell 中root键入相同的行为。mkfs.btrfs -f -m single -L root /dev/sda1

如果确实有一些包含空格的参数,则可能需要对$IFS变量和编码进行一些技巧。

$@您还可以使用具有其自身规则的特殊变量。

我将所有 shell 内容都写入 POSIX,因此我确信在 Bash 中有更简单的方法可以做到这一点。

相关内容