$ @ หมายความว่าเป็นพารามิเตอร์ฟังก์ชันสคริปต์ทุบตี


16

สิ่งที่ไม่$@ได้หมายความว่าเป็นพารามิเตอร์ของฟังก์ชันสคริปต์ทุบตี?

ตัวอย่าง:

function foo()
{
    echo "$@" 1>&2;
}

คำตอบ:


20

$@ขยายตัวแปรพารามิเตอร์ทั้งหมดที่ใช้เมื่อเรียกใช้ฟังก์ชันเพื่อ

function foo()
{
    echo "$@"
}

foo 1 2 3

1 2 3จอแสดงผลหากว่า หากไม่ได้ใช้ภายในฟังก์ชันจะระบุพารามิเตอร์ทั้งหมดที่ใช้เมื่อเรียกสคริปต์ ดูหน้าคู่มือทุบตีสำหรับข้อมูลเพิ่มเติม


11

$ @ เป็นหนึ่งในสอง "พารามิเตอร์ตำแหน่ง" เป็นตัวแทนในทุบตีอีกคนเป็น $ *

ทั้ง $ @ และ $ * เป็นตัวแปรทุบตีภายในที่แสดงถึงพารามิเตอร์ทั้งหมดที่ส่งผ่านไปยังฟังก์ชั่นหรือสคริปต์ที่มีความแตกต่างที่สำคัญหนึ่งปุ่ม $ @ มีแต่ละพารามิเตอร์เป็นสตริงที่ยกมาแยกต่างหากในขณะที่ $ * มีพารามิเตอร์ทั้งหมดเป็นสตริงเดียว ความแตกต่างนั้นจะแสดงในรหัสต่อไปนี้:

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


0

ฉันคาดหวังว่ามันหมายถึงใช้เป็นแฮชพารามิเตอร์อินพุตทั้งหมด ดังนั้นหากมีพารามิเตอร์อินพุต 3 ตัวพวกเขาจะพร้อมใช้งานภายในฟังก์ชันในรูปแบบของ $ 1, $ 2, $ 3


2
ไม่มันเป็นตัวแปรภายในซึ่งหมายถึงพารามิเตอร์ทั้งหมดที่กำหนดให้กับฟังก์ชัน พวกเขามีอยู่เป็น$1, $2ฯลฯ $@ต่อไปโดยไม่คำนึงถึง
terdon
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.