Câu trả lời:
[[
là từ dành riêng bash, do đó các quy tắc mở rộng đặc biệt như mở rộng số học được áp dụng, không giống như trong trường hợp với [
. Ngoài ra toán tử nhị phân số học -eq
được sử dụng. Do đó, shell tìm biểu thức nguyên và nếu tìm thấy văn bản ở mục đầu tiên, nó sẽ cố gắng mở rộng nó dưới dạng tham số. Nó được gọi là mở rộng số học và có mặt trong man bash
.
RESERVED WORDS
Reserved words are words that have a special meaning to the shell.
The following words are recognized as reserved
…
[[ ]]
[[ expression ]]
Return a status of 0 or 1 depending on the evaluation of
the conditional expression expression. Expressions are
composed of the primaries described below under CONDITIONAL
EXPRESSIONS. Word splitting and pathname expansion are not
performed on the words between the [[ and ]]; tilde
expansion, parameter and variable expansion, >>>_arithmetic
expansion_<<<, command substitution, process substitution, and
quote removal are performed.
Arithmetic Expansion
…
The evaluation is performed according to the rules listed below
under ARITHMETIC EVALUATION.
ARITHMETIC EVALUATION
…
Within an expression, shell variables may also be referenced
by name without using the parameter expansion syntax.
Ví dụ:
[[ hdjakshdka -eq fkshdfwuefy ]]
sẽ luôn luôn trở lại đúng
Nhưng cái này sẽ trả về lỗi
$ [[ 1235hsdkjfh -eq 81749hfjsdkhf ]]
-bash: [[: 1235hsdkjfh: value too great for base (error token is "1235hsdkjfh")
Ngoài ra đệ quy có sẵn:
$ VALUE=VALUE ; [[ VALUE -eq 12 ]]
-bash: [[: VALUE: expression recursion level exceeded (error token is "VALUE")
man bash
câu trả lời của tôi để làm cho nó rõ ràng.
[[
là một từ dành riêng, mà bởi vì những gì bên trong [[ … ]]
không phải là cú pháp lệnh thông thường, mà là một biểu thức có điều kiện. Trong một biểu thức có điều kiện, các đối số cho các toán tử số học như -eq
là đối tượng để đánh giá số học.