Dưới đây là một loạt các trường hợp echo $var
có thể hiển thị giá trị khác với giá trị vừa được gán. Điều này xảy ra bất kể giá trị được chỉ định là "trích dẫn kép", "trích dẫn đơn" hay không được trích dẫn.
Làm cách nào để lấy shell để đặt biến của tôi một cách chính xác?
Dấu hoa thị
Kết quả mong đợi là /* Foobar is free software */
, nhưng thay vào đó, tôi nhận được danh sách các tên tệp:
$ var="/* Foobar is free software */"
$ echo $var
/bin /boot /dev /etc /home /initrd.img /lib /lib64 /media /mnt /opt /proc ...
Dấu ngoặc vuông
Giá trị mong đợi là vậy [a-z]
, nhưng đôi khi tôi nhận được một chữ cái thay thế!
$ var=[a-z]
$ echo $var
c
Nguồn cấp dữ liệu dòng (dòng mới)
Giá trị mong đợi là một danh sách các dòng riêng biệt, nhưng thay vào đó tất cả các giá trị nằm trên một dòng!
$ cat file
foo
bar
baz
$ var=$(cat file)
$ echo $var
foo bar baz
Nhiều không gian
Tôi mong đợi một tiêu đề bảng được căn chỉnh cẩn thận, nhưng thay vào đó nhiều khoảng trắng biến mất hoặc bị thu gọn thành một!
$ var=" title | count"
$ echo $var
title | count
Các tab
Tôi mong đợi hai giá trị được phân tách bằng tab, nhưng thay vào đó tôi nhận được hai giá trị được phân tách bằng dấu cách!
$ var=$'key\tvalue'
$ echo $var
key value
var=$(cat file)
là tốt, nhưngecho "$var"
là cần thiết.