小编Jon*_* Y.的帖子

通过内容(存储在变量中)从bash数组中删除元素而不留空白插槽

我有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} …

arrays bash unset

6
推荐指数
2
解决办法
1万
查看次数

重定向问题

在尝试在bash脚本中保留进度日志时,我注意到了一些我不理解的内容.可以使用以下行重现该问题:

var1=$(var2=$(echo "Hi!"))
Run Code Online (Sandbox Code Playgroud)

执行此行后,var2保持为空.我不明白导致这种行为的原因(如果生成的输出echo被重定向到某处,它没有进入var1),更重要的是,我可以做些什么来避免出现这个问题.

任何形式的帮助(解释/指针)将不胜感激.

bash shell

1
推荐指数
1
解决办法
38
查看次数

标签 统计

bash ×2

arrays ×1

shell ×1

unset ×1