簡體   English   中英

為什么Bash中'['和']'兩邊要有空格?

[英]Why should there be spaces around '[' and ']' in Bash?

我試圖編寫一個使用if語句的 Bash 腳本。

if[$CHOICE -eq 1];

腳本一直給我錯誤,直到我在[和之前]之前和之后給出一個空格,如下所示:

if [ $CHOICE -eq 1 ];

我的問題是,為什么方括號周圍的空間在 Bash 中如此重要?

一旦你掌握了[是一個命令,很多事情就會變得更加清晰!

[是“ test ”的另一種拼寫方式。

help [

然而,雖然他們做的完全一樣,但test結果證明有一個更詳細的幫助頁面。 查看

help test

...了解更多信息。


此外請注意,我有意使用help test而不是man test 那是因為test[現在是 shell 內置命令。 它們的功能集可能與 coreutils 中的/bin/test/bin/[不同,它們是man頁中描述的命令。

另一個問題

一點歷史:這是因為 '[' 在歷史上不是 shell 內置的,而是一個單獨的可執行文件,它接收表達式作為參數並返回結果。 如果你沒有用空格包圍 '[',shell 將在 $PATH 中搜索不同的文件名(而不是找到它)。 安德魯·梅迪科 2009年 6 月 24 日在 1:13

[是一個命令, $CHOICE應該是一個參數,但是通過執行[$CHOICE (在[$CHOICE之間沒有任何空格),您正在嘗試運行一個名為[$CHOICE的命令。 命令的語法是:

command arguments separated with space

[是一個test命令。 所以它需要空間。

值得注意的是 [ 也用於 glob 匹配,這會給您帶來麻煩。

$ echo [12345]
[12345]
$ echo oops >3
$ echo [12345]
3

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM