Bash 指令碼中 $@ 和 $* 之間的區別
Yahya Irmak
2022年5月11日
Bash
Bash Parameter
你可以使用 $@ 和 $* 來獲取 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

Enjoying our tutorials? Subscribe to DelftStack on YouTube to support us in creating more high-quality video guides. Subscribe
作者: Yahya Irmak
Yahya Irmak has experience in full stack technologies such as Java, Spring Boot, JavaScript, CSS, HTML.
LinkedIn