我正在尝试使用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] 删除。
我来说两句