วิธีการส่งพารามิเตอร์เพื่อทำงานในสคริปต์ทุบตี?


14

ฉันต้องการเขียนฟังก์ชั่นที่ฉันสามารถโทรหาจากสคริปต์ที่มีตัวแปรต่าง ๆ มากมาย ด้วยเหตุผลบางอย่างฉันมีปัญหาในการทำเช่นนี้ ตัวอย่างที่ฉันอ่านเสมอใช้ตัวแปรทั่วโลก แต่นั่นจะไม่ทำให้โค้ดของฉันอ่านง่ายขึ้นเท่าที่ฉันเห็น

ตัวอย่างการใช้งานที่ตั้งใจไว้:

#!/bin/bash
#myscript.sh
var1=$1
var2=$2
var3=$3
var4=$4

add(){
result=$para1 + $para2
}

add $var1 $var2
add $var3 $var4
# end of the script

./myscript.sh 1 2 3 4

ฉันลองใช้$1และในฟังก์ชั่น แต่หลังจากนั้นมันก็ใช้ทั่วโลกที่สคริปต์ทั้งหมดถูกเรียกจาก โดยทั่วไปสิ่งที่ฉันกำลังมองหาสิ่งที่ต้องการ$1, $2และอื่น ๆ แต่ในบริบทของท้องถิ่นของฟังก์ชั่น ฟังก์ชั่นทำงานในภาษาที่เหมาะสม


ใช้ $ 1 และ $ 2 ในตัวอย่างของคุณเพิ่มฟังก์ชั่น "งาน" ลองecho $1และecho $2ในมัน
วีแลนด์

ตัวอย่างของฉันไม่สมบูรณ์อย่างน่ากลัวฉันอัปเดตเป็นพวง ตอนนี้ afaik มันจะไม่ทำงานอีกต่อไป
user181822

แทนที่result = ด้วยresult=$(($1 + $2))และเพิ่มecho $resultหลังจากนั้นและทำงานอย่างถูกต้อง $ 1 และ $ 2 เป็นอาร์กิวเมนต์ของฟังก์ชันของคุณ
วีแลนด์

คำตอบ:


18

ในการเรียกใช้ฟังก์ชันที่มีอาร์กิวเมนต์:

function_name "$arg1" "$arg2"

ฟังก์ชันอ้างถึงอาร์กิวเมนต์ที่ส่งผ่านตามตำแหน่ง (ไม่ใช่ตามชื่อ) นั่นคือ $ 1, $ 2 และอื่น ๆ $ 0 เป็นชื่อของสคริปต์เอง

ตัวอย่าง:

#!/bin/bash

add() {
    result=$(($1 + $2))
    echo "Result is: $result"
}

add 1 2

เอาท์พุต

./script.sh
 Result is: 3

2
ฉันตระหนักถึงความผิดพลาดของฉันตอนนี้ ฉันใช้ $ 0 และ $ 1 ในฟังก์ชั่นและ $ 0 แก้ไขให้กับชื่อสคริปต์แน่นอน ฉันเข้าใจผิดว่าเป็นพารามิเตอร์ของสคริปต์ไม่ใช่ฟังก์ชั่นของตัวเอง ขอขอบคุณ!
user181822

6

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

#!/bin/bash
#myscript.sh
var1=$1
var2=$2
var3=$3
var4=$4

add(){
  #Note the $1 and $2 variables here are not the same of the
  #main script... 
  echo "The first argument to this function is $1"
  echo "The second argument to this function is $2"
  result=$(($1+$2))
  echo $result

}

add $var1 $var2
add $var3 $var4
# end of the script


./myscript.sh 1 2 3 4
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.