รหัสของคุณควรใช้งานได้ แต่ถ้า$MY_LIST
ไม่มีอักขระพิเศษต่าง ๆ :
echo $MY_LIST
ควรจะเป็นหรือprintf %s "$MY_LIST"
print -r -- "$MY_LIST"
การไม่มีเครื่องหมายอัญประกาศบอกให้เชลล์แสดงตัวอักษรกลมที่มี\\*?[
อยู่ นอกจากนี้ยังบอกให้เชลล์แยกคำที่ช่องว่างแม้ว่าจะไม่สำคัญที่นี่ยกเว้นสำหรับปัญหาถัดไป
- การใช้
echo
สาเหตุการตีความเพิ่มเติมของแบ็กสแลชและการเป็นผู้นำ-
ในบางสถานการณ์
- `sed s" /, / / g "ทำให้ทั้งเครื่องหมายจุลภาคและเว้นวรรคคั่นคำ
ปัญหาเพิ่มเติมอธิบายว่าทำไมการทดสอบขั้นสุดท้ายของคุณไม่ทำงานนั่นคือการwc -w
สร้างเอาต์พุตด้วยช่องว่างนำซึ่งถูกบันทึก$NUM_IN_LIST
ไว้ print $NUM_IN_LIST
ทำการแยกคำออก$NUM_IN_LIST
ดังนั้นมันจะจบลงด้วยการพิมพ์ตัวเลข ทำprint "$NUM_IN_LIST"
เพื่อดูความแตกต่าง [[ … ]]
สร้างยับยั้งการแยกคำและ=
เป็นผู้ประกอบการเปรียบเทียบสตริงดังนั้นคุณจะบอกได้อย่างถูกต้องที่ไม่ได้เป็นสิ่งเดียวกับ' 3'
หรือจะเป็นจริง (แต่ไม่ใช่วิธีการแก้ปัญหาจริงพวกเขาเป็นเพียงการแก้ปัญหาที่ จำกัด )'3'
[[ $NUM_IN_LIST -eq 3 ]]
[ $NUM_IN_LIST = 3 ]
วิธี ksh ล้วนเพื่อแสดงจำนวนของเขตข้อมูลที่คั่นด้วยเครื่องหมายจุลภาคคือ
commas=${MY_LIST//[!,]/}
NUM_IN_LIST=${#commas}
หากใครต้องการโซลูชั่นที่ POSIX commas=$(printf %s "$MY_LIST" | tr -dc ,)
ดวลจุดโทษแทนบรรทัดแรกโดย