重复同一命令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
请注意,参数必须用单引号括起来,否则在调用函数之前将处理一次变量展开。