Estoy intentando conseguir el mismo efecto que escribircómo hacer que bash expanda comodines en variables?
mv ./images/*.{pdf,eps,jpg,svg} ./images/junk/
en la línea de comandos, desde el interior de una escritura del golpe. Tengo:
MYDIR="./images"
OTHERDIR="./images/junk"
SUFFIXES='{pdf,eps,jpg,svg}'
mv "$MYDIR/"*.$SUFFIXES "$OTHERDIR/"
que, cuando se ejecuta, da el error no es algo inesperado:
mv: rename ./images/*.{pdf,eps,jpg,svg} to ./images/junk/*.{pdf,eps,jpg,svg}:
No such file or directory
¿Cuál es la forma correcta de citar todo esto para que mv
hará realmente la expansión deseada? (Sí, hay un montón de archivos que coinciden con el patrón en ./images/
.)
+1, buen truco, no sabía nada de '@()', aprendí algo nuevo. Solo busqué en la página de manualidades, para cualquiera que se pregunte si hay ''() 'patrones,' *() 'patrones,' +() 'patrones,' @() 'patrones y'!() 'Patrones. Todo disponible si 'extglob' está habilitado. – falstro
Brillante, gracias! Citar y expandir en scripts de shell siempre me causa problemas, esto ayudará mucho. –
@RossDuncan, sugiero http://mywiki.wooledge.org/BashParser como un lugar para comenzar para obtener una buena referencia sobre las fases involucradas en el modelo de ejecución del intérprete de órdenes y sobre el orden en que ocurren. –