2013-01-02 31 views
12

Tôi rất mới để tạo tập lệnh bash, nhưng mục tiêu của tôi ở đây là lấy tệp .txt mà tôi có và gán chuỗi từ trong txt tập tin vào một biến. Tôi đã thử điều này (không có đầu mối nếu tôi đi đúng hướng hay không).Cần gán nội dung của tệp văn bản vào biến trong tập lệnh bash

#!/bin/bash 
FILE="answer.txt" 
file1="cat answer.txt" 
print $file1 

Khi tôi chạy này, tôi nhận được

Warning: unknown mime-type for "cat" -- using "application/octet-stream" 
Error: no such file "cat" 
Error: no "print" mailcap rules found for type "text/plain" 

tôi có thể làm gì để làm cho công việc này?

Sửa ** Khi tôi thay đổi nó thành:

#!/bin/bash 
    FILE="answer.txt" 
    file1=$(cat answer.txt) 
    print $file1 

tôi có được điều này thay vì:

Warning: unknown mime-type for "This" -- using "application/octet-stream" 
Warning: unknown mime-type for "text" -- using "application/octet-stream" 
Warning: unknown mime-type for "string" -- using "application/octet-stream" 
Warning: unknown mime-type for "should" -- using "application/octet-stream" 
Warning: unknown mime-type for "be" -- using "application/octet-stream" 
Warning: unknown mime-type for "a" -- using "application/octet-stream" 
Warning: unknown mime-type for "varible." -- using "application/octet-stream" 
Error: no such file "This" 
Error: no such file "text" 
Error: no such file "string" 
Error: no such file "should" 
Error: no such file "be" 
Error: no such file "a" 
Error: no such file "varible." 

Khi tôi nhập mèo answer.txt nó in ra chuỗi văn bản này phải là một varible như nó nên nhưng, tôi vẫn không thể có được bash để làm điều đó với varible.

+0

'file_contents = $ (cat answer.txt) '? –

+0

@WaleedKhan Tôi đã thử điều này và bây giờ nhận được các lỗi trên – BluGeni

+3

Như tôi đã nói trong câu trả lời của tôi, bạn đang sử dụng in thay vì echo. Ngoài ra, bạn có thể không cần 'FILE =" answer.txt "' bạn không sử dụng nó ở bất cứ đâu. –

Trả lời

17

Bạn cần backticks để nắm bắt đầu ra từ một lệnh (và có thể bạn muốn echo thay vì print):

file1=`cat answer.txt` 
echo $file1 
+0

Cảm ơn bạn đã tìm thấy cả hai lỗi mới bắt đầu của tôi! – BluGeni

11

Việc xây dựng $() trả về stdout từ một lệnh.

file_contents=$(cat answer.txt) 
+1

+1; cụ thể hơn, nó được gọi là thay thế lệnh: http://tldp.org/LDP/abs/html/commandsub.html –

+3

Điều đó không đúng khi nói đúng. Kết quả của lệnh này là 0 (được lưu trong $?), Đầu ra ** của lệnh này là nội dung của tệp. –

+1

Tôi đã thử điều này và bây giờ có được các lỗi trên – BluGeni

22

Trong bash $(< answer.txt) là một viết tắt dựng sẵn cho $(cat answer.txt)

tôi nghi ngờ bạn đang chạy này print:

NAME 
    run-mailcap, see, edit, compose, print − execute programs via entries in the mailcap file 
+2

Nó không thực sự là một cách viết tắt. Đó là, theo hướng dẫn tham chiếu bash _equivalent bởi faster_. Điều này chắc chắn là _the_ câu trả lời cho OP. (Nó phải là một chấp nhận). Bạn cũng nên đề cập đến cách in bản mở rộng của '$ file1':' echo "$ file1" '. –

+0

Rất vui khi thông báo lỗi thực sự có nghĩa là anh ta đã nhập "print" thay vì "printf", đó là những gì mang lại cho tôi ở đây. –

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