คำถามติดแท็ก basename

3
shellcheck ไม่แนะนำให้ใช้ basename: ทำไม
ฉันกำลังพยายามออกshellcheck ฉันมีบางอย่างเช่นนั้น basename "${OPENSSL}" และฉันได้รับคำแนะนำต่อไปนี้ Use parameter expansion instead, such as ${var##*/}. จากมุมมองจริงฉันไม่เห็นความแตกต่าง $ export OPENSSL=/opt/local/bin/openssl $ basename ${OPENSSL} openssl $ echo ${OPENSSL##*/} openssl เนื่องจากbasenameเป็นข้อมูลจำเพาะของ POSIXฉันจึงไม่มีเหตุผลว่าทำไมจึงควรเป็นวิธีปฏิบัติที่ดีที่สุด คำใบ้ใด ๆ

4
dirname และ basename เทียบกับการขยายพารามิเตอร์
มีเหตุผลใดที่จะชอบอีกรูปแบบหนึ่งหรือไม่ ประสิทธิภาพความน่าเชื่อถือความสะดวกในการพกพา? filename=/some/long/path/to/a_file parentdir_v1="${filename%/*}" parentdir_v2="$(dirname "$filename")" basename_v1="${filename##*/}" basename_v2="$(basename "$filename")" echo "$parentdir_v1" echo "$parentdir_v2" echo "$basename_v1" echo "$basename_v2" ผลิต: /some/long/path/to /some/long/path/to a_file a_file (v1 ใช้การขยายพารามิเตอร์เชลล์ v2 ใช้ไบนารีภายนอก)

6
ใช้ basename เพื่อวิเคราะห์รายการพา ธ ที่เก็บไว้ในไฟล์
ฉันใช้ Mac OSX และพยายามใช้บรรทัดคำสั่งเพื่อค้นหาจำนวนไฟล์ที่ฉันมีด้วยชื่อเดียวกัน ฉันพยายามใช้คำสั่งต่อไปนี้: find ~ -type f -name "*" -print | basename | sort | uniq -d > duplicate_files มันไม่ทำงาน! เมื่อฉันทำต่อไปนี้: find ~ -type f -name "*" -print > duplicate_files จากนั้น Duplicate_files จะมีพา ธ ของไฟล์ทั้งหมดของฉัน ดังนั้นฉันคิดว่าปัญหาเกิดขึ้นกับbasename- ไม่ยอมรับอินพุตมาตรฐาน ฉันลองทำสิ่งต่อไปนี้: basename $(find ~ -type f -name "*" -print) > duplicate_files …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.