สิ่งที่ไม่$@
ได้หมายความว่าเป็นพารามิเตอร์ของฟังก์ชันสคริปต์ทุบตี?
ตัวอย่าง:
function foo()
{
echo "$@" 1>&2;
}
สิ่งที่ไม่$@
ได้หมายความว่าเป็นพารามิเตอร์ของฟังก์ชันสคริปต์ทุบตี?
ตัวอย่าง:
function foo()
{
echo "$@" 1>&2;
}
คำตอบ:
$@
ขยายตัวแปรพารามิเตอร์ทั้งหมดที่ใช้เมื่อเรียกใช้ฟังก์ชันเพื่อ
function foo()
{
echo "$@"
}
foo 1 2 3
1 2 3
จอแสดงผลหากว่า หากไม่ได้ใช้ภายในฟังก์ชันจะระบุพารามิเตอร์ทั้งหมดที่ใช้เมื่อเรียกสคริปต์ ดูหน้าคู่มือทุบตีสำหรับข้อมูลเพิ่มเติม
$ @ เป็นหนึ่งในสอง "พารามิเตอร์ตำแหน่ง" เป็นตัวแทนในทุบตีอีกคนเป็น $ *
ทั้ง $ @ และ $ * เป็นตัวแปรทุบตีภายในที่แสดงถึงพารามิเตอร์ทั้งหมดที่ส่งผ่านไปยังฟังก์ชั่นหรือสคริปต์ที่มีความแตกต่างที่สำคัญหนึ่งปุ่ม $ @ มีแต่ละพารามิเตอร์เป็นสตริงที่ยกมาแยกต่างหากในขณะที่ $ * มีพารามิเตอร์ทั้งหมดเป็นสตริงเดียว ความแตกต่างนั้นจะแสดงในรหัสต่อไปนี้:
foo() {
while [ "$1" != "" ]; do
echo $1
shift
done
}
dollar_at () {
foo "$@"
}
dollar_star () {
foo "$*"
}
echo "Using \$@"
dollar_at a b c
echo "Using \$*"
dollar_star a b c
เอาท์พุท:
Using $@
a
b
c
Using $*
a b c
หมายเหตุเมื่อเรียกด้วย $ * จะมีการส่งอาร์กิวเมนต์หนึ่งรายการให้กับ foo () แต่ด้วยอาร์กิวเมนต์ $ @ สามรายการจะถูกส่งผ่านไปยัง foo ()
ข้อมูลเพิ่มเติม: http://tldp.org/LDP/abs/html/internalvariables.html#APPREF
ฉันคาดหวังว่ามันหมายถึงใช้เป็นแฮชพารามิเตอร์อินพุตทั้งหมด ดังนั้นหากมีพารามิเตอร์อินพุต 3 ตัวพวกเขาจะพร้อมใช้งานภายในฟังก์ชันในรูปแบบของ $ 1, $ 2, $ 3
$1
,$2
ฯลฯ$@
ต่อไปโดยไม่คำนึงถึง