执行变量替换/String操作N次



重复同一命令n次。前已提出问题

但这个问题中的方法不适用于变量分配

例如。

var='abc,xyz,mnx,duid'
for f in `seq 3`; do var=${var%,*}; done

以上工作,但在其他问题中描述的功能中使用它不起的作用

例如。

repeat() { num="$"; shift; for f in $(seq $num); do $1; done; }
repeat 3 'var=${var%,*}'
repeat 3 "var=${var%,*}"

不起作用

基于您的样本数据

var='abc,xyz,mnx,duid'

您也可以通过多次连接搜索项来获得相同的效果

var=${var%,*,*,*}

也就是说,你也可以做之类的事情

var=${var%$(printf ',*%.0s' {1..3})}

n=3; var=${var%$(printf ',*%.0s' $(seq $n))}

展开变量后不会处理变量的展开和赋值。您需要使用eval将其作为shell命令重新执行。

您还有一个打字错误,"$"应该是"$1"

repeat() { num="$1"; shift; for f in $(seq $num); do eval "$1"; done; }
repeat 3 'var=${var%,*}'
echo "$var" # output = abc

请注意,参数必须用单引号括起来,否则在调用函数之前将处理一次变量展开。

最新更新