Bash 指令碼中 $@ 和 $* 之間的區別

Yahya Irmak 2022年5月11日
Bash 指令碼中 $@ 和 $* 之間的區別

你可以使用 $@$* 來獲取 Bash 指令碼中的位置引數。本文將解釋 Bash 指令碼中星號 ($*) 和 at-sign ($@) 之間的區別。

Bash 指令碼中星號 ($*) 和簽名 ($@) 之間的區別

$* 表示式從一開始並擴充套件到位置引數。如果表示式未與雙引號一起使用,則每個位置引數都擴充套件為一個單獨的單詞。

#!/bin/bash 
for i in $*; do
    echo "* without quote -> $i"
done

不帶引號的星號

如果表示式與雙引號一起使用,則每個引數的值將擴充套件為一個單詞。引數由內部欄位分隔符 (IFS) 分隔。

如果未定義 IFS,則它們用空格分隔。如果將其設定為 null,則將值連線起來而不插入分隔符。

#!/bin/bash 
for i in "$*"; do
    echo "* with quote -> $i"
done

帶引號的星號

$@ 表示式從一開始並擴充套件到位置引數。如果表示式使用雙引號,每個引數擴充套件為一個單獨的單詞,但引號內的引數不被拆分;也就是說,"$@" 等價於 $1 $2 …

#!/bin/bash 
for i in "$@"; do
    echo "@ with quote -> $i"
done

帶引號的簽名

如果使用不帶雙引號的表示式,每個引數將擴充套件為一個單獨的單詞,包括引號中的引數。

#!/bin/bash 
for i in $@; do
    echo "@ without quote -> $i"
done

at-sign 不帶引號

作者: Yahya Irmak
Yahya Irmak avatar Yahya Irmak avatar

Yahya Irmak has experience in full stack technologies such as Java, Spring Boot, JavaScript, CSS, HTML.

LinkedIn