ลบอักขระออกจากจุดสิ้นสุดของตัวแปร


130

การเติมข้อมูลอัตโนมัติของ Bash จะผนวก a / ท้ายชื่อไดเรกทอรี ฉันจะถอดสิ่งนี้ออกจากพารามิเตอร์ตำแหน่งได้อย่างไร

#!/bin/sh

target=$1

function backup(){
  date=`date "+%y%m%d_%H%M%S"`
  PWD=`pwd`
  path=$PWD/$target
  tar czf /tmp/$date$target.tar.gz $path
}

backup

คำตอบ:


242

ใช้

target=${1%/}

อ้างอิง


8
และมันก็เป็นPOSIXดังนั้นจึงพกพาได้ค่อนข้างดี
go2null

3
ดูคำตอบของGilles สำหรับวิธีง่ายๆในการตัดcase $x in *[!/]*/) x=${x%"${x##*[!/]}"};; esac
ทอน

1
และถ้าคุณต้องใช้สิ่งนี้กับตัวแปรเช่น DIR มันจะเป็นเช่นนั้นtarget=${DIR%/}
Brad Parks

การเชื่อมโยงจะตาย (ยูเครน)
Зелди

@ Зелди - ขอบคุณคงแล้ว
martin Clayton


13

ฉันคิดว่าทางออกที่ดีกว่าในการกำหนดเส้นทางให้เป็นแบบrealpath $pathหรือมี-mตัวเลือกหากไม่มี โซลูชันนี้จะลบเครื่องหมายสแลชที่ไม่จำเป็นออกโดยอัตโนมัติและเพิ่ม pwd


realpath ไม่น่าจะพกพาได้มาก: unix.stackexchange.com/questions/101080/…
Matthew

realpath เป็นส่วนหนึ่งของ GNU coreutils ซึ่งเป็นพฤตินัยในการแจกแจงลินุกซ์และในกรณีนี้ผู้ใช้อาจติดตั้งแพ็กเกจภายนอกที่แตกต่างกันซึ่งสามารถทำลายการพกพา
amenzhinsky

2
ไม่ใช่ distro ทุกคนที่มี realpath ตัวอย่างเช่นฉันใช้ Linux Mint 17 (ซึ่งใช้ Ubuntu) และไม่มีค่าเริ่มต้น มันอยู่ใน repos แต่ไม่ได้ติดตั้งโดยอัตโนมัติ นั่นคือสิ่งที่ลิงค์ที่ฉันโพสต์กำลังพูดถึง
Matthew

ทางออกที่ดีสำหรับกรณีการใช้งานที่ระบุถึงแม้ว่าคำตอบที่ทำเครื่องหมายว่าถูกต้องนั้นดีที่สุดสำหรับชื่อเรื่องและทั่วไปที่สุด สำหรับฉันฉันต้องการลบเครื่องหมายสแลชต่อท้ายออกจาก URL ดังนั้นสิ่งนี้จะไม่ทำงาน เกี่ยวกับข้อเสนอแนะของคุณที่นี่สิ่งที่ฉันได้พบจากประสบการณ์คือว่าเป็นเพียงเล็กน้อยแบบพกพามากกว่าreadlink -f realpathสำหรับตัวเลือกเพิ่มเติม / ทางเลือก: linux.die.net/man/1/readlink
flungo

1
สิ่งนี้ใช้ได้กับฉัน:target=$(realpath -L --relative-base . $1)
Mattia72

3

ระวัง bash3 เพิ่ม regex คล้าย perl ลงใน bash คู่มือดังกล่าวครอบคลุมถึงสิ่งนี้รวมถึง คู่มืออย่างเป็นทางการที่ GNUแต่ไม่มีการอ้างอิงทั้งหมด

ฉันทำอะไร?

แทนจะเป็น2.19/*2.19

สารละลาย

VER="2.19/foo-bar"
NEWVER=${VER%/*}

ไม่ทำงานเครื่องหมายทับยังคงอยู่ที่นั่น (ในตอนท้ายของตัวแปรซึ่งตัวอย่างของคุณไม่มี)
Zelphir Kaltstahl
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.