#!/bin/bash
VALUE=10
if [[ VALUE -eq 10 ]]
then
echo "Yes"
fi
ด้วยความประหลาดใจของฉันผลลัพธ์นี้ "ใช่" [[ $VALUE -eq 10 ]]
ผมจะได้คิดว่ามันจะต้องมี ฉันสแกนCONDITIONAL EXPRESSIONS
ส่วนของman bash
แล้ว แต่ไม่พบสิ่งใดที่จะอธิบายพฤติกรรมนี้
#!/bin/bash
VALUE=10
if [[ VALUE -eq 10 ]]
then
echo "Yes"
fi
ด้วยความประหลาดใจของฉันผลลัพธ์นี้ "ใช่" [[ $VALUE -eq 10 ]]
ผมจะได้คิดว่ามันจะต้องมี ฉันสแกนCONDITIONAL EXPRESSIONS
ส่วนของman bash
แล้ว แต่ไม่พบสิ่งใดที่จะอธิบายพฤติกรรมนี้
คำตอบ:
[[
[
เป็นคำสงวนทุบตีจึงขยายตัวพิเศษกฎเช่นการขยายตัวทางคณิตศาสตร์ถูกนำมาใช้ไม่ได้เช่นในกรณีที่มี นอกจากนี้ยังมีผู้ประกอบการไบนารีเลขคณิต-eq
ถูกนำมาใช้ ดังนั้นเชลล์จะค้นหานิพจน์จำนวนเต็มและหากพบข้อความในรายการแรกมันจะพยายามขยายเป็นพารามิเตอร์ 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.
ตัวอย่างเช่น:
[[ hdjakshdka -eq fkshdfwuefy ]]
จะกลับมาจริงเสมอ
แต่อันนี้จะกลับข้อผิดพลาด
$ [[ 1235hsdkjfh -eq 81749hfjsdkhf ]]
-bash: [[: 1235hsdkjfh: value too great for base (error token is "1235hsdkjfh")
สามารถเรียกซ้ำได้ด้วย:
$ VALUE=VALUE ; [[ VALUE -eq 12 ]]
-bash: [[: VALUE: expression recursion level exceeded (error token is "VALUE")
man bash
ไปยังคำตอบเพื่อให้ชัดเจน
[[
เป็นคำที่สงวนไว้ แต่เพราะสิ่งที่อยู่ภายใน[[ … ]]
ไม่ใช่ไวยากรณ์คำสั่งธรรมดา แต่เป็นนิพจน์เงื่อนไข ในนิพจน์เงื่อนไขอาร์กิวเมนต์ของตัวดำเนินการทางคณิตศาสตร์เช่น-eq
อาจมีการประเมินทางคณิตศาสตร์