2012-02-05 30 views
6

cách tôi có thể đọc tệp văn bản và lưu tệp đó vào biến trong bash? mã của tôi là ở đây:lưu tệp văn bản vào một biến trong 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

bản sao có thể có của [đọc tệp và lưu nó bằng biến bằng cách sử dụng tập lệnh shell] (http://stackoverflow.com/questions/7427262/read-a-file-and-save-it-in-variable-using- shell-script) –

Trả lời

14

Vấn đề là bạn có thêm không gian. Nhiệm vụ yêu cầu không gian giữa nhà điều hành =. Tuy nhiên, với bash bạn có thể sử dụng:

TEXT=$(<configure.ac) 

Bạn cũng sẽ muốn chắc chắn rằng bạn trích dẫn các biến của bạn để duy trì dòng mới

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

nó hoạt động nhưng nó có một vấn đề: các dòng bị thiếu. tất cả các ký tự trở thành chỉ trong 1 dòng như [this] (http://paste.kde.org/200162/) những gì tôi nên làm gì? – reza

+1

@reza bạn đã trích dẫn các biến của mình như tôi đã đề cập chưa? – SiegeX

3

Hãy thử

TEXT=`cat configure.ac` 

Điều đó sẽ làm việc.

Edit:

Để làm rõ, sự khác biệt là ở khoảng cách: đặt một không gian sau khi TEXT nguyên nhân bash để cố gắng nhìn nó như một lệnh.

1

Đối với thực thi một lệnh và trả kết quả trong kịch bản bash cho tiết kiệm trong một biến, ví dụ, bạn phải viết lệnh bên trong để var = $ (command). Và bạn không được cho dấu cách giữa var, '=' và $(). Hãy xem điều này

TEXT=$('cat configure.ac') 

Bây giờ, echo $TEXT trả lại nội dung theo tệp configure.ac.

Các vấn đề liên quan