我正在嘗試編寫一個使用if
語句的Bash腳本。爲什麼Bash中'['之前和之前']有空格?
if [$CHOICE -eq 1];
的劇本給我的錯誤,直到我[
後]
之前給了一個空間,如下圖所示:
if [ $CHOICE -eq 1 ];
我在這裏的問題是,爲什麼前後的方括號中如此重要的空間擊?
我正在嘗試編寫一個使用if
語句的Bash腳本。爲什麼Bash中'['之前和之前']有空格?
if [$CHOICE -eq 1];
的劇本給我的錯誤,直到我[
後]
之前給了一個空間,如下圖所示:
if [ $CHOICE -eq 1 ];
我在這裏的問題是,爲什麼前後的方括號中如此重要的空間擊?
一旦你掌握[
是命令,一大堆變得更清晰!
[
是拼寫「test
」的另一種方法。
help [
但是當他們這樣做究竟的一樣,test
原來有一個更詳細的幫助頁面。檢查
help test
...瞭解更多信息。
而且注意,我使用的,由意向,help test
而不是man test
。這是因爲test
和[
是現在的shell命令。它們的功能集可能與/bin/test
和/bin/[
不同於coreutils,這是man
頁面中描述的命令。
,最初是'/ usr/bin/[',並且是'/ usr/bin/test'的硬鏈接,當調用爲'['時,應該在最後一個參數中包含一個右括號。現在它是一個內置的shell。 – Benoit 2012-03-06 09:41:30
一點歷史:這是因爲「[」在歷史上不是一個殼內置,但所收到的expresson作爲參數和返回結果的獨立的可執行文件。如果你沒有用空格來包圍'['',那麼shell會在$ PATH中搜索一個不同的文件名(並且沒有找到它)。 - Andrew Medico 06月24 '09在1:13
[
是test
命令。所以它需要空間。
[
是一個命令和$CHOICE
應該是一個說法,但這樣做[$CHOICE
(不[
和$CHOICE
之間的任何空間)你想運行一個名爲[$CHOICE
命令。爲命令的語法是:
command arguments separated with space
一般語法'如果命令;那麼commands_if_exit_code_is_0; else commands_if_exit_code_is_nonzero;網絡連接;'。 *'command' *可以是任何命令,'['只是其中之一。 – Benoit 2012-03-06 09:43:09
相關: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