Arrays 在Bash中遍历字符串数组并删除部分字符串值?

Arrays 在Bash中遍历字符串数组并删除部分字符串值?,arrays,regex,string,bash,Arrays,Regex,String,Bash,如何遍历字符串数组,并删除其部分值?(猛击) 我用保存为字符串的站点列表填充了一个数组,我想获取“.com.au”左侧的站点部分,并将它们保存到一个新数组中。字符串中还有几个项目没有以“.com.au”结尾,我想完全忽略它们 为了便于阅读,我删除了大部分代码,只保留了我认为与问题相关的内容: #!/bin/bash full_array(*); declare -p full_array edited_array=() for x in ${full_array[@]}; #If x

如何遍历字符串数组,并删除其部分值?(猛击)

我用保存为字符串的站点列表填充了一个数组,我想获取“.com.au”左侧的站点部分,并将它们保存到一个新数组中。字符串中还有几个项目没有以“.com.au”结尾,我想完全忽略它们

为了便于阅读,我删除了大部分代码,只保留了我认为与问题相关的内容:

#!/bin/bash
full_array(*); declare -p full_array
edited_array=()

for x in ${full_array[@]};
    #If x ends with '.com.au'
        #Remove '.com.au' from x
        #Save output to edited_array
    #Else
        #Skip item
done
我必须用正则表达式来做这个吗?如果是这样的话,有人知道有什么好的在线教程值得一看吗

if [[ $x == *.com.au ]]; then
    edited_array+=( "${x%.com.au}" )
fi
在bash双括号内,
=
操作符是一个模式匹配操作符。然后,只需使用shell参数扩展来删除域,并使用
+=

将其附加到数组中,这应该可以工作:

for x in ${full_array[@]};do
[[ $x == *.com.au ]] && edited_array+=("${x%.com.au}")
done

有什么特别的原因让你必须用bash来做吗?你试过sed或awk吗?我被告知要用bash编写,所以我试着坚持。你想使用
“${full_array[@]}”
(引号很重要)来确保正确处理带有空格和shell元字符的文件/条目/等。你不需要正则表达式(尽管你可以使用它们),你也可以用它来尝试去掉后缀,并将去掉的值与原始值进行比较。我编辑了我的代码以包含它(实际上只是在for循环中复制/粘贴它),但现在我收到一个意外的EOF错误,告诉我它正在寻找一个结束报价。你知道会发生什么事吗?我在任何地方都看不到任何开放引号?我做了更正,但仍然不可见。您应该将“#”替换为“%”。我之前的评论是关于答案的。关于第一条评论和缺少的引号:在你的问题片段中的“for x in…”行后面缺少一个“do”关键字。在您的终端中键入<代码>帮助,您将看到。我尝试了,但得到了相同的错误?:(如果有帮助的话,我会这样做:编辑:哦,去掉最后一行也不行。@Thorium,naitoon是对的:将
#com.au
更改为
%.com.au
,将其从字符串末尾删除。