apply

Parancssorban kiváltható a for-ciklus ezzel a paranccsal.

Nemrég találtam rá, a FreeBSD-ben az alaptelepítés része, man apply.

$ file *                                                                                                                                                
foo_1.txt: empty
foo_2.txt: empty
foo_3.txt: empty
foo_4.txt: empty
foo_5.txt: empty
foo_6.txt: empty
foo_7.txt: empty
foo_8.txt: empty
foo_9.txt: empty

$ apply -d "ln -s %1 %1.lnk" *.txt
exec ln -s foo_1.txt foo_1.txt.lnk
exec ln -s foo_2.txt foo_2.txt.lnk
exec ln -s foo_3.txt foo_3.txt.lnk
exec ln -s foo_4.txt foo_4.txt.lnk
exec ln -s foo_5.txt foo_5.txt.lnk
exec ln -s foo_6.txt foo_6.txt.lnk
exec ln -s foo_7.txt foo_7.txt.lnk
exec ln -s foo_8.txt foo_8.txt.lnk
exec ln -s foo_9.txt foo_9.txt.lnk

$ apply "ln -s %1 %1.lnk" *.txt

$ file *
foo_1.txt:     empty
foo_1.txt.lnk: symbolic link to foo_1.txt
foo_2.txt:     empty
foo_2.txt.lnk: symbolic link to foo_2.txt
foo_3.txt:     empty
foo_3.txt.lnk: symbolic link to foo_3.txt
foo_4.txt:     empty
foo_4.txt.lnk: symbolic link to foo_4.txt
foo_5.txt:     empty
foo_5.txt.lnk: symbolic link to foo_5.txt
foo_6.txt:     empty
foo_6.txt.lnk: symbolic link to foo_6.txt
foo_7.txt:     empty
foo_7.txt.lnk: symbolic link to foo_7.txt
foo_8.txt:     empty
foo_8.txt.lnk: symbolic link to foo_8.txt
foo_9.txt:     empty
foo_9.txt.lnk: symbolic link to foo_9.txt

$ rm *.lnk

$ apply -d -2 "diff %1 %2" *
exec diff foo_1.txt foo_2.txt
exec diff foo_3.txt foo_4.txt
exec diff foo_5.txt foo_6.txt
exec diff foo_7.txt foo_8.txt
apply: expecting additional argument after "foo_9.txt"

Hozzászólások

Köszi, én sem ismertem, de a szintaxis nem tűnik valami elegánsnak. Még gondolkodom, hogy mi lenne az igazán releváns use case, amikor kiválthatja a loop-ot.

Ha úgy tetszik, ez inkább csak syntax sugar, a loop helyett lehet ilyet is, és így nem kell a do, meg a pontosvessző, meg a done. Nekem a convert-nél (ImageMagick) most bejött: apply "convert -resize 800 %1 kicsi/%1" *.jpg módon. Tömörebb, mint a for f in *.jpg; do convert -resize ${f} kicsi/${f}; done szerkezet, és szerintem átláthatóbb is.