2016-05-16 5 views
3

Ich versuche, ein Array in bash zu erweitern:Inline Expansion von Arrays in bash

FILES=(2009q{1..4}) 
echo ${FILES[@]} 
echo ${FILES[@]}.zip 

Ausgang ist:

2009q1 2009q2 2009q3 2009q4 
2009q1 2009q2 2009q3 2009q4.zip 

Aber wie kann ich die letzte Zeile wie in echo 2009q{1..4}.zip Expansion erweitern, so dass die letzte Zeile aussah:

2009q1.zip 2009q2.zip 2009q3.zip 2009q4.zip 

... aber unter Verwendung von Array FILES?

+1

'FILES = (2009q {1..4} .zip)' wird nicht tun? – Jahid

Antwort

6
FILES=(2009q{1..4}) 
echo ${FILES[@]/%/.zip} 

Ausgang:

 
2009q1.zip 2009q2.zip 2009q3.zip 2009q4.zip 

Von Bash Parameter Expansion:

${parameter/pattern/string}: Das Muster wird erweitert, um ein Muster zu erzeugen, genau wie bei der Dateinamenserweiterung. Der Parameter wird erweitert und die längste Übereinstimmung des Musters mit seinem Wert wird durch einen String ersetzt. Wenn Muster mit '/' beginnt, werden alle Übereinstimmungen von Muster durch Zeichenfolge ersetzt. Normalerweise wird nur die erste Übereinstimmung ersetzt. Wenn das Muster mit '#' beginnt, muss es am Anfang des erweiterten Werts des Parameters übereinstimmen. Wenn das Muster mit '%' beginnt, muss es am Ende des erweiterten Werts des Parameters übereinstimmen. Wenn Zeichenfolge null ist, werden Übereinstimmungen von Mustern gelöscht und das/folgende Muster kann weggelassen werden. Wenn der Parameter '@' oder '' ist, wird die Ersetzungsoperation der Reihe nach auf jeden Positionsparameter angewendet, und die Erweiterung ist die Ergebnisliste. Wenn der Parameter eine Array-Variable ist, die mit '@' oder '' indiziert ist, wird die Ersetzungsoperation nacheinander auf jedes Mitglied des Arrays angewendet, und die Erweiterung ist die resultierende Liste.

+2

habe nicht daran gedacht, schlau. – karakfa

2

können Sie verwenden printf:

printf "%s.zip " "${FILES[@]}" 

2009q1.zip 2009q2.zip 2009q3.zip 2009q4.zip 
Verwandte Themen