bash - 遍历数组,防止通配符扩展 (*)

标签 bash variables wildcard expansion

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

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

我有上面的内容,我正在尝试获得以下输出:

 *
 *.foo.com
 *.bar.com

我得到的不是上面的,而是当前目录的目录列表,后面是 *.foo.com 和 *.bar.com

我知道我需要转义或在某处引用..清晨的阴霾仍然笼罩着我的大脑。

我已经复习了这些问题:

How to escape wildcard expansion in a variable in bash?

Stop shell wildcard character expansion?

最佳答案

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

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/

相关文章:

bash - 如何合并两组具有相同文件名后缀的文本文件?

linux - 自己调用 bash 脚本

bash - osascript语法错误 “Expected expression but found end of line. (-2741)”

java - 为什么我的代码告诉我初始化一个已经初始化的变量?

ssl - 如何为通配符多域证书生成 CSR

arrays - Bash-SSH到关联数组中的主机

java:从内部类内部访问局部变量looper;需要声明为final,但变量可能尚未初始化

javascript - 为什么这个变量会出现 "Uncaught TypeError: Cannot read property"错误?

java - 为什么通配符类路径对我不起作用?

java - 类<? super T> in getSuperclass() 有意义吗?