Sto lavorando ad uno script bash per creare una nuova cartella in/tmp/usando il nome di un file, e quindi copiare il file all'interno di quella cartella.basename con spazi in uno script bash?
#!/bin/bash
MYBASENAME="`basename $1`"
mkdir "/tmp/$MYBASENAME"
for ARG in "[email protected]"
do
mv "$ARG" "/tmp/$MYBASENAME"
done
Comportamento:
Quando digito in mymove "/home/me/downloads/my new file.zip"
lo dimostra questo:
mkdir /tmp/my
new
file.zip
mv: rename /home/me/downloads/my new file.zip to /tmp/my\nnew\nfile.zip:
Ho un sacco di virgolette intorno tutto, quindi non capisco perché questo non funziona come previsto .
Inoltre, ho il ciclo di moduli in là nel caso ci siano più file. Voglio che vengano copiati tutti nella stessa cartella, in base al basename del primo argomento.
ho notato che molti script di shell predefiniti usano sh invece di bash.Non riesco ancora a distinguere troppo la differenza, ad eccezione di cose come 'echo \ c' per impedire la visualizzazione di una nuova riga. grazie per i suggerimenti e la risposta utile. – cwd
Il modo portatile con echo \ c è di usare 'printf' dove si omette semplicemente' \ n' nella stringa di formato. I bashismi più usati sono probabilmente l'uso di variabili di matrice, sintassi non POSIX come '[[...]]' per test, per cicli con 'for ((...))', e il costrutto 'select' . – Jens
Questo non funziona con bash spedito su macosx lion (GNU bash, versione 3.2.48 (1) -release (x86_64-apple-darwin11) – rjha94