我试图弄清楚我认为在 BASH 中是一个微不足道的问题,但我很难找到正确的语法。我想遍历一组值,其中一个是星号 (*),我不希望在此过程中发生任何通配符扩展。
WHITELIST_DOMAINS="* *.foo.com *.bar.com"
for domain in $WHITELIST_DOMAINS
do
echo "$domain"
done
我有上面的内容,我正在尝试获得以下输出:
*
*.foo.com
*.bar.com
我得到的不是上面的,而是当前目录的目录列表,后面是 *.foo.com 和 *.bar.com
我知道我需要转义或在某处引用..清晨的阴霾仍然笼罩着我的大脑。
我已经复习了这些问题:
最佳答案
你的问题是你想要一个数组,但是你写了一个包含元素的字符串,元素之间有空格。请改用数组。
WHITELIST_DOMAINS=('*' '*.foo.com' '*.bar.com')
始终在变量替换周围使用双引号(即 "$foo"
),否则 shell 会将变量的值拆分为单独的单词并将每个单词视为文件名通配符模式。命令替换也是如此:"$(somecommand)"
。对于数组变量,使用 "${array[@]}"
扩展到数组元素的列表。
for domain in "${WHITELIST_DOMAINS[@]}"
do
echo "$domain"
done
有关详细信息,请参阅 the bash FAQ about arrays .
关于bash - 遍历数组,防止通配符扩展 (*),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13252329/