循环在阵列上,防止通配符膨胀(*)



我试图弄清楚我认为bash中的一个琐碎问题,但是我很难找到正确的语法。我想循环遍历一系列的价值,其中一个是星号(*),我不希望在此过程中发生任何通配符扩展。

 WHITELIST_DOMAINS="* *.foo.com *.bar.com"
 for domain in $WHITELIST_DOMAINS
 do
    echo "$domain"
 done

我有上述内容,我正在尝试获取以下输出:

 *
 *.foo.com
 *.bar.com

而不是以上,我在当前目录上获得了一个目录列表,其次是 *.foo.com和 *.bar.com

我知道我需要在某处逃脱或引用一些。

我已经回顾了以下问题:

如何在bash中的变量中逃脱通配符的扩展?

停止外壳通配符扩展?

您的问题是您想要一个数组,但是您写了一个包含它们之间空格的元素的单个字符串。改用数组。

WHITELIST_DOMAINS=('*' '*.foo.com' '*.bar.com')

始终在变量替换周围使用双引号(即"$foo"),否则,壳将变量的值分为单独的单词,并将每个单词视为文件名通配符模式。命令替换也是如此:"$(somecommand)"。对于数组变量,请使用"${array[@]}"扩展到数组元素的列表。

for domain in "${WHITELIST_DOMAINS[@]}"
 do
    echo "$domain"
 done

有关更多信息,请参见有关数组的bash常见问题。

您可以使用数组存储它们:

array=('*' '*.foo.com' '*.bar.com')
for i in "${array[@]}"
do
    echo "$i"
done

相关内容

  • 没有找到相关文章

最新更新