2012-03-06 66 views
36

我正在嘗試編寫一個使用if語句的Bash腳本。爲什麼Bash中'['之前和之前']有空格?

if [$CHOICE -eq 1]; 

的劇本給我的錯誤,直到我[]之前給了一個空間,如下圖所示:

if [ $CHOICE -eq 1 ]; 

我在這裏的問題是,爲什麼前後的方括號中如此​​重要的空間擊?

+4

一般語法'如果命令;那麼commands_if_exit_code_is_0; else commands_if_exit_code_is_nonzero;網絡連接;'。 *'command' *可以是任何命令,'['只是其中之一。 – Benoit 2012-03-06 09:43:09

+0

相關:https://stackoverflow.com/questions/4977367/why-equal-to-operator-does-not-work-if-its-not-surrounded-by-space(你也需要操作員的空間) 。 – tripleee 2017-10-02 04:37:07

回答

43

一旦你掌握[命令,一大堆變得更清晰!

[是拼寫「test」的另一種方法。

help [ 

但是當他們這樣做究竟一樣,test原來有一個更詳細的幫助頁面。檢查

help test 

...瞭解更多信息。


而且注意,我使用的,由意向,help test而不是man test。這是因爲test[是現在的shell命令。它們的功能集可能與/bin/test/bin/[不同於coreutils,這是man頁面中描述的命令。

+5

,最初是'/ usr/bin/[',並且是'/ usr/bin/test'的硬鏈接,當調用爲'['時,應該在最後一個參數中包含一個右括號。現在它是一個內置的shell。 – Benoit 2012-03-06 09:41:30

12

another question

一點歷史:這是因爲「[」在歷史上不是一個殼內置,但所收到的expresson作爲參數和返回結果的獨立的可執行文件。如果你沒有用空格來包圍'['',那麼shell會在$ PATH中搜索一個不同的文件名(並且沒有找到它)。 - Andrew Medico 06月24 '09在1:13

2

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

4

[是一個命令和$CHOICE應該是一個說法,但這樣做[$CHOICE(不[$CHOICE之間的任何空間)你想運行一個名爲[$CHOICE命令。爲命令的語法是:

command arguments separated with space 
相關問題