HOWTO · Bash
Bash 指令碼中 $@ 和 $* 之間的區別
本文解釋了 bash 指令碼中星號和 at-sign 之間的區別。
本頁內容
你可以使用 $@ 和 $* 來獲取 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