Bash scripting - espansioni non quotabili: differenze tra le versioni

aggiunti esempi e più spiegazioni
m ("do" su una nuova riga (uniformazione alla sintassi usata altrove))
(aggiunti esempi e più spiegazioni)
Riga 43: Riga 43:
{{Box | File | Su Unix e Unix-like per file si può intendere sia un file regolare, ma anche una directory, un link simbolico, una pipe, un socket, un device, ecc...
{{Box | File | Su Unix e Unix-like per file si può intendere sia un file regolare, ma anche una directory, un link simbolico, una pipe, un socket, un device, ecc...


L'espansione di percorso avviene unicamente in base al nome del file, che dev'essere univoco in una cartella, e non al tipo di file. L'unica eccezione sono le directory, perché possono essere identificate anche con lo slash (/) finale.}}
L'espansione di percorso (chiamata anche ''globbing'') avviene unicamente in base al nome del file, che dev'essere univoco in una cartella, e non al tipo di file. L'unica eccezione sono le directory, perché possono essere identificate anche con lo slash (/) finale.}}


Le espansioni di percorso sono possibili solo se i caratteri speciali che la consentono (<code>* ? [ ]</code>) non sono racchiusi tra virgolette, apici o preceduti da <code>/</code>. È sempre consigliabile racchiudere tutto il resto tra virgolette, per non permettere espansioni accidentali.
Le espansioni di percorso sono possibili solo se i caratteri speciali che la consentono (<code>* ? [ ]</code>) non sono racchiusi tra virgolette, apici o preceduti da <code>/</code>. È sempre consigliabile racchiudere tutto il resto tra virgolette, per non permettere espansioni accidentali.
Riga 85: Riga 85:


L'esistenza di file ottenuti da tali espansioni va pertanto sempre controllata, impiegando l'espansione per generare una lista di stringhe all'interno di un ciclo <code>for</code>, ed effettuando poi il controllo di esistenza su ognuna:
L'esistenza di file ottenuti da tali espansioni va pertanto sempre controllata, impiegando l'espansione per generare una lista di stringhe all'interno di un ciclo <code>for</code>, ed effettuando poi il controllo di esistenza su ognuna:
<pre>
<pre>for file in ./*; do
for file in ./*
do
   if [ -e "$file" ]; then
   if [ -e "$file" ]; then
       ...
       ...
Riga 133: Riga 131:
<pre>
<pre>
shopt -s dotglob nullglob
shopt -s dotglob nullglob
for file in ./*
for file in ./*; do
do
   ...
   ...
done
done
Riga 145: Riga 142:


<pre>
<pre>
for f in ./*.txt
for f in ./*.txt; do
do
   if [ -f "$f" ]; then
   if [ -f "$f" ]; then
       mv -- "$f" "${f%txt}log"
       mv -- "$f" "${f%txt}log"
Riga 184: Riga 180:
Questa espansione è effettuata prima di tutte le altre, e il risultato dell'espansione se non quotato può quindi subire ulteriori espansioni. Per esempio per effettuare un'operazione sui file nella cartella corrente che hanno una data estensione, si può scrivere:
Questa espansione è effettuata prima di tutte le altre, e il risultato dell'espansione se non quotato può quindi subire ulteriori espansioni. Per esempio per effettuare un'operazione sui file nella cartella corrente che hanno una data estensione, si può scrivere:
<pre>
<pre>
for file in ./*.{odt,abw,txt,rtf,doc}
for file in ./*.{odt,abw,txt,rtf,doc}; do
do
   if [ -e "$file" ]; then
   if [ -e "$file" ]; then
       ...
       ...
Riga 193: Riga 188:
e la prima riga è equivalente a:
e la prima riga è equivalente a:
<pre>
<pre>
for file in ./*.odt ./*.abw ./*.txt ./*.rtf ./*.doc
for file in ./*.odt ./*.abw ./*.txt ./*.rtf ./*.doc; do
</pre>
</pre>


3 581

contributi