Bash

迴聲987654321098765432109876543210顯示 1 4 5 6 … 為什麼?

  • March 14, 2017

請解釋為什麼最後四個 echo 語句顯示 1 4 5 6?我曾經偶然碰到過這個,但我現在很好奇為什麼會發生這種行為。

這些陳述按預期工作(對我來說)。

$ echo [ 9876543210 ]  
[ 9876543210 ]

$ echo [237890]  
[237890]

這些 echo 語句始終顯示 1 4 5 6。這些數字有什麼特別之處嗎?

$ echo [9876543210]  
1 4 5 6

$ echo [abcd9876543210ghi]  
1 4 5 6

$ echo [-123456-]  
1 4 5 6

$ echo [-7654321-]  
1 4 5 6

謝謝!

  • 可能的重複是相關且有用的,但不是重複的。可能的重複是從rm命令的角度來看的。這個問題是從echo命令的感知“奇怪行為”的角度來看的。兩者的基本答案都是萬用字元。使用命令搜尋問題的echo人不會輕易找到rm問題,但更有可能在這裡找到問題。

左括號[是 shell 的特殊字元;它打開了一個模式匹配算法,說“匹配括號內的任何字元”。因為您在目前目錄中有 4 個文件,分別命名為:1、4、5 和 6,所以當括號內的字元包含這些數字中的任何一個時,您的 shell 會將模式匹配替換為這些文件名。相反,當您使用echo [ 9876543210 ]3 個參數呼叫 echo 時:[9876543210].

您應該引用 echo 語句的參數,以防止 shell 將其視為模式匹配請求。

$ echo '[9876543210]'
[9876543210]

(或刪除名為 1、4、5 和 6 的文件——但這是展示行為的解決方法,而不是修復)。

引用自:https://unix.stackexchange.com/questions/347950