วิธีอื่นคือลบล้างพวกเขา:
: ${PACKAGENAME:?'$PACKAGENAME variable is empty!'} #emits error and exits
[ -z "${PACKAGENAME#kakadu-v6_4-00902C}" ] || { #if var - str not empty do block
echo '$PACKAGENAME is not kakadu-v6_4-00902C'
exit 1
} >&2
การทดสอบครั้งแรกบล็อกข้างต้นถ้า"$PACKAGENAME"
มีค่าใด ๆ และถ้าไม่ได้ออกจากที่มีข้อผิดพลาดและสะท้อนไป?'this'}
stderr
หากเปลือกหลักยังคงมีอยู่การทดสอบจะผ่านไปและจะทำการทดสอบครั้งถัดไปหากลบสตริง 'kakadu ... ' ออกจากตัวแปรผลลัพธ์จะเป็น-z
สตริงว่าง หากไม่เป็นเช่นนั้นจะส่งข้อผิดพลาดอีกครั้งและออกจากเชลล์ หากเชลล์ของคุณยังคงมีอยู่ ณ จุดนี้สิ่งใดหลังจากบล็อกจะดำเนินการมิฉะนั้นมันจะไม่
อาจเป็นไปได้ว่าการเรียงลำดับของสิ่งนี้ดีที่สุดในฟังก์ชั่น ชอบ:
argeq() ( i= : ${2?^MERR: not enough parameters!} #$#>=2 || quit w/ err ^M == \r
z() { return $((${#1}>0)) ; } #return 1 if ${#1}>0 else 0
until z "${2+?}" $((i=i+1)) #until $2 is not set...
do ! z "$1" && z "${1#"$2"}" || #$1 != '' && $1 - $2 == '' or...
exit $((i${1:++1})) #exit $? == failed arg count
shift ; done #shift away one param ; continue loop
)
ด้วยฟังก์ชันนั้นคุณสามารถระบุอาร์กิวเมนต์ได้มากเท่าที่ระบบของคุณจะอนุญาต ถ้าคุณให้น้อยกว่า 2 มันจะกลับมาที่ 1 stderr
และปล่อยข้อความไปยัง หากคุณให้ข้อโต้แย้งอย่างน้อย 2 ข้อจะถือว่าเป็นสตริงทั้งหมดและส่งคืน 0 หากทั้งหมดเหมือนกันและไม่เป็นโมฆะมันจะส่งคืนหมายเลขอาร์กิวเมนต์ที่ไม่สามารถตรวจสอบได้ในตอนแรก
ในกรณีของคุณสามารถใช้เช่น:
{
PACKAGENAME='kakadu-v6_4-00902C'
argeq "$PACKAGENAME" kakadu-v6_4-00902C &&
echo "kakadu-v6_4-00902C == $PACKAGENAME" ||
echo failure
! argeq "${PACKAGENAME#*-}" kakadu-v6_4-00902C &&
echo "kakadu-v6_4-00902C != ${PACKAGENAME#*-}" ||
echo failure
}
###OUTPUT###
kakadu-v6_4-00902C == kakadu-v6_4-00902C
kakadu-v6_4-00902C != v6_4-00902C
เพื่อแสดงเพิ่มเติมฉันจะเขียนฟังก์ชั่นอื่น:
aeqecho() { i=$((i+1)) #inc for line#
argeq "$@" && echo "$i : yay" || #allswell or
! e=$? ${2+:} return || #save $?; ! exclusive || to drop ERRs
echo "$i : shite - arg$e failed" #report failure
}
การสาธิต:
{ i= s=string
aeqecho $s #1
aeqecho $s $s #2
aeqecho "$s $s" #3
aeqecho "$s $s" "${s} string" #4
aeqecho "${s}1" $s string #5
aeqecho "" "" "" #6
aeqecho "" "$s" $s #7
aeqecho 1 "${s#$s}1" $((2-1)) #8
aeqecho $s $s $s $s $s $s $s $s $s $s $s $s stng #9
aeqecho $s $s $s $s $s $s $s $s $s $s $s $s string #10
}
เอาท์พุท:
ERR: not enough parameters!
2 : yay
ERR: not enough parameters!
4 : yay
5 : shite - arg2 failed
6 : shite - arg1 failed
7 : shite - arg1 failed
8 : yay
9 : shite - arg13 failed
10 : yay
-eq
เป็นจริงสำหรับจำนวนเต็มคุณต้องการทดสอบสตริงหรือ regex (==
หรือ=~
): mywiki.wooledge.org/BashGuide/TestsAndConditionals