我很乐意将分号、换行符和与号放在需要的地方。但什么是“正确”的方法呢?这只是风格/个人喜好的问题,还是其中一个在某些方面比另一个更好?
while true; do
cmd1
cmd2
cmd3
done
while true; do
cmd1;
cmd2;
cmd3;
done
第二个使用更多的墨水/电子,但你可以简单地连接线,它仍然可以:
while true; do cmd1; cmd2; cmd3; done
我很乐意将分号、换行符和与号放在需要的地方。但什么是“正确”的方法呢?这只是风格/个人喜好的问题,还是其中一个在某些方面比另一个更好?
while true; do
cmd1
cmd2
cmd3
done
while true; do
cmd1;
cmd2;
cmd3;
done
第二个使用更多的墨水/电子,但你可以简单地连接线,它仍然可以:
while true; do cmd1; cmd2; cmd3; done
是否可以执行以下操作?
g=$f:s/$in/$out/;
或者
g=$g:s/$in[$i]/$out[$i]/;
我尝试过随机字符组合,例如${~in}
和g=$g:ps/
,但是,正如你所看到的,我不是 zsh 专家——猜测对我没有任何帮助:-)我什至尝试阅读手册页...
编辑:我正在尝试编写自己的 zmv 类型命令:
# in a*b* -> a b (%?)NULL rn a*b* *c*d aXXbYY --> XXcYYd
# out *c*d -> NULL c d rn inv* mag* inv.ext inv.spc --> mag.ext mag.spc
alias rn='setopt noglob; frn'
function frn() {
local in out m n f g i;
setopt glob histsubstpattern; # changes shell's options
in=("${(@s:*:)1}"); # split $1 and $2 on '*'
out=("${(@s:*:)2}"); # keeping NULL fields
m=${#in[@]}; # count n(array-elements)
n=${#out[@]};
if [[ $m = $n ]] {
foreach f ($~1) # foreach file in globbed $1
g=$f;
for (( i = 0; i < $n; i += 1 )); do
g=$g:s/$in[i]/$out[i]/; # subst corresponding fields
done;
print '$f --> $g'
mv $f $g;
end;
} else {
print "n(*) must be same for both patterns";
}
}