Bash không được đánh máy mạnh mẽ; 1 sự khác biệt đáng kể duy nhất là giữa các loại vô hướng và hợp chất (mảng). Vô hướng luôn được coi là chuỗi , nhưng có "chuỗi số" có thể được sử dụng một cách hợp lý:
a="5"
b=10
echo "$a + $b = "$(($a+$b));
"Chuỗi số" chỉ đơn giản là một chuỗi chỉ chứa các chữ số và do đó có thể được chuyển đổi thành một giá trị số nguyên. Tất cả các giá trị vô hướng trong bash vẫn chỉ là các chuỗi và các trích dẫn trong khai báo ở đây là không liên quan. a=5
là hoàn toàn giống như a="5"
. Nếu bạn so sánh $a
và $b
sử dụng (ví dụ) -lt
chúng được coi là số. Nếu bạn so sánh chúng bằng cách sử dụng <
chúng được xử lý từ vựng. Đó là toán tử / bối cảnh làm cho quyết định, không phải là một đặc tính của biến.
Bạn cũng có thể khai báo một biến bằng "cờ số nguyên" và điều này sẽ khiến giá trị khai báo được hiểu là biểu thức số học:
x=10/2
echo "$x" # output: 10/2
declare -i x=10/2
echo "$x" # output: 5
declare -i x=what
echo "$x" # output: 0
Sau đó, mọi thứ được gán cho biến đó sẽ được giải thích một cách hợp lý:
a=5
declare -i b=10
a=$a/5
b=$b/5
echo "$a $b" #output: 5/5 2
a=hello
b=world
echo $a$b #output hello0
Nhưng nội dung của biến vẫn là một chuỗi (số). Cờ số nguyên giới hạn nội dung của chuỗi và ảnh hưởng đến việc giải thích các giá trị được gán cho nó.
1 Đây không phải là kiểu gõ động đơn giản, như trường hợp của số nguyên khai báo thể hiện. Có lẽ chúng ta có thể gọi nó là một kiểu gõ vịt , hoặc, theo Hướng dẫn về kịch bản nâng cao của Bash , nó là "được tháo gỡ".
name=Michael Jackson ; echo "$name"
vàname="Michael Jackson" ; echo "$name"
. Rất khác nhau. Thông thường, luôn đặt dấu ngoặc kép xung quanh khi bạn xác định và sử dụng biến.cd "${var}"
sẽ tốt hơn nhiều so vớicd $var
việc âm thầm đi đến homedir thay vì phản đối nếu var không được xác định ... Trừ khi bạn cần gọi rõ ràng từng yếu tố riêng biệt, tức là trong mộtfor i in $var ; do something ; done