2012-02-05 10 views
6

come posso leggere un file di testo e salvarlo in una variabile in bash? il mio codice è qui:salva un file di testo in una variabile in bash

#!/bin/bash 
TEXT="dummy" 
echo "Please, enter your project name" 
read PROJECT_NAME 
mkdir $PROJECT_NAME 
cp -r -f /home/reza/Templates/Template\ Project/* $PROJECT_NAME 
cd $PROJECT_NAME/Latest 
TEXT = `cat configure.ac ` ## problem is here !!! 
CHANGED_TEXT=${TEXT//ProjectName/$PROJECT_NAME} 
echo $CHANGED_TEXT 
+0

possibile duplicato di [leggere un file e salvarlo in variabile utilizzando lo script di shell] (http://stackoverflow.com/questions/7427262/read-a-file-and-save-it-in-variable-using- shell-script) –

risposta

14

Il problema è che si dispone di uno spazio aggiuntivo. L'assegnazione richiede zero spazi tra l'operatore =. Tuttavia, con bash è possibile utilizzare:

TEXT=$(<configure.ac) 

Si potrà anche fare in modo che citi le variabili per conservare a capo

CHANGED_TEXT="${TEXT//ProjectName/$PROJECT_NAME}" 
echo "$CHANGED_TEXT" 
+0

ha funzionato ma ha un problema: mancano le righe. Tutti i caratteri diventano in una sola riga come [this] (http://paste.kde.org/200162/) cosa dovrei fare? – reza

+1

@reza hai citato le tue variabili come ho detto? – SiegeX

3

Prova

TEXT=`cat configure.ac` 

che dovrebbe funzionare.

Edit:

Per chiarire, la differenza è nella distanza: mettere uno spazio dopo TEXT cause bash per cercare di guardare in su come un comando.

1

Per eseguire un comando e restituire il risultato di script bash per Save in una variabile, ad esempio, è necessario scrivere il comando inner in var = $ (comando). E non devi dare spazi tra var, '=' e $(). Guardate questa

TEXT=$('cat configure.ac') 

Ora, echo $TEXT restituire il contenuto del file da configure.ac.

Problemi correlati