2013-08-30 40 views
13

Tôi có một biến final_list được nối bởi một biến url trong một vòng lặp như:Kết nối hai biến chuỗi trong bash phụ newline

while read url; do 
    final_list="$final_list"$'\n'"$url" 
done < file.txt 

Trước sự ngạc nhiên của tôi \n được nối như một không gian, vì vậy kết quả là :

url1 url2 url3 

trong khi tôi muốn:

url1 
url2 
url3 

Có gì sai?

Trả lời

16

Các dòng mới rất có trong biến số "$final_list". echo nó như này với dấu ngoặc kép:

echo "$final_list" 
url1 
url2 
url3 

HOẶC tốt hơn sử dụng printf:

printf "%s\n" "$final_list" 
url1 
url2 
url3 
+0

Cảm ơn bạn. Bạn có thể giải thích một chút về những gì đang xảy ra không. –

+3

Trích dẫn là vô cùng quan trọng trong vỏ Unix. Không có dấu ngoặc kép, không áp dụng bất kỳ quy tắc mở rộng nào và xử lý các dòng mới là dấu cách. – anubhava

+3

Không có dấu ngoặc kép, bất kỳ khoảng trắng nào (bao gồm cả dòng mới) trong phần mở rộng của '$ final_list' được coi là dấu tách từ, chứ không phải ký tự chữ để in. 'echo' chỉ nhận được 3 đối số, các URL thực. Với dấu ngoặc kép, 'echo' nhận một đối số duy nhất, chuỗi chứa url và các dòng mới tách riêng chúng. – chepner

2

Nó có thể phụ thuộc vào cách bạn đang cố gắng để hiển thị các kết quả cuối cùng. Hãy thử xuất biến kết quả trong dấu ngoặc kép:

echo "$final_list" 
Các vấn đề liên quan