我有list一个bash脚本中的数组和一个变量var.我知道它$var出现在${list[@]},但没有简单的方法来确定其索引.我想将其删除list.
这个答案达到了我所需要的非常接近的东西,除了list保留一个空元素$var.请注意,例如:
$ list=(one two three)
$ var="two"
$ list=( "${list[@]/$var}" )
$ echo ${list[@]}
one three
$ echo ${#list[@]}
3
Run Code Online (Sandbox Code Playgroud)
如果我在第三行使用delete=( "$var" )和替换$var,也会发生同样的事情$delete.此外,做list=( "${list[@]/$var/}" )也没有任何区别.(我会注意到,尝试对该答案的评论,我设法只匹配整个单词list=( "${list[@]/%$var}" ),省略#.)
我也看到这个答案提出了一个很好的技巧来跟踪索引和使用unset,但在我的情况下这是不可行的.最后,同样的问题也出现在这里,除了OP对结果感到满意,并且可能没有遇到空元素在我的脚本中为我创建的问题,当我迭代时list.我尝试通过如下使用扩展来否定该问题,没有任何明显的影响:
for item in "${list[@]}"; do
if [ -n ${item:+'x'} ];then
...
fi
done
Run Code Online (Sandbox Code Playgroud)
我这样做是一样的[ ${#item} …
在尝试在bash脚本中保留进度日志时,我注意到了一些我不理解的内容.可以使用以下行重现该问题:
var1=$(var2=$(echo "Hi!"))
Run Code Online (Sandbox Code Playgroud)
执行此行后,var2保持为空.我不明白导致这种行为的原因(如果生成的输出echo被重定向到某处,它没有进入var1),更重要的是,我可以做些什么来避免出现这个问题.
任何形式的帮助(解释/指针)将不胜感激.