带有变量的Bash变量展开

戴尔

我正在尝试使用bash的变量名扩展,但似乎无法正常工作。${!${prefix}*}特别是失败的地方。以下是可重现的示例。

#!/bin/bash

MountVolumes_b_mkfs_options='foo bar baz'
MountVolumes_b_path=/foo/bar/baz
MountVolumes_b_mnt_options='foo bar baz'
MountVolumes_b_fs=xfs
MountVolumes_c_path=/foo/bar/baz
MountVolumes_c_fs=xfs
MountVolumes_c_mkfs_fs_options=-'t really -foo /ugly/options'
MountVolumes_c_mkfs_options='-t really -foo /ugly/options'

prefixes=($(echo "${!MountVolumes*}" | grep 'MountVolumes_[b-z]' -o | uniq))

for prefix in ${prefixes[@]}; do
  echo "prefix: ${prefix}"

  ##I need this to expand to: 
  ##MountVolumes_b_mkfs_options MountVolumes_b_path MountVolumes_b_mnt_options MountVolumes_b_fs
  echo "${!${prefix}*}" 
done

echo "${!MountVolumes_b*}" ##Works

我该怎么做呢?

菲利普

这样可以实现所需的功能:

#!/bin/bash

MountVolumes_b_mkfs_options='foo bar baz'
MountVolumes_b_path=/foo/bar/baz
MountVolumes_b_mnt_options='foo bar baz'
MountVolumes_b_fs=xfs
MountVolumes_c_path=/foo/bar/baz
MountVolumes_c_fs=xfs
MountVolumes_c_mkfs_fs_options=-'t really -foo /ugly/options'
MountVolumes_c_mkfs_options='-t really -foo /ugly/options'

prefixes=($(echo "${!MountVolumes*}" | grep 'MountVolumes_[b-z]' -o | uniq))

for prefix in ${prefixes[@]}; do
  echo "prefix: ${prefix}"

  ##I need this to expand to: 
  ##MountVolumes_b_mkfs_options MountVolumes_b_path MountVolumes_b_mnt_options MountVolumes_b_fs
  declare -a "vars=(\${!${prefix}*})"
  echo "${vars[@]}"
done

echo "${!MountVolumes_b*}" ##Works

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章