Bir değişkenin sonundaki bir karakteri kaldır


130

Bash otomatik tamamlama, dizin adının sonuna bir / ekler. Bunu konumsal bir parametreden nasıl çıkarabilirim?

#!/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

Yanıtlar:


242

kullanım

target=${1%/}

Bir referans .


8
Ve POSIX olduğu için oldukça taşınabilir.
go2null

3
Kök (/) güvenliğini korurken birden fazla izleyen '/' yi kaldırmanın basit bir yolu için Gilles'in yanıtına bakın : case $x in *[!/]*/) x=${x%"${x##*[!/]}"};; esac
go2null

1
ve bunu bir değişkenle (ör. DIR) kullanmak zorunda olsaydın, o zaman butarget=${DIR%/}
Brad Parks

Bir bağlantı öldü (Ukrayna)
Зелди

@ Зелди - teşekkürler, düzeltildi.
martin clayton


13

Bence yolları kanonize etmek için daha iyi bir çözüm realpath $pathya da -myoksa seçenekle. Bu çözüm otomatik olarak gereksiz eğik çizgileri kaldırır ve pwd ekler


realpath pek taşınabilir olmayabilir
Matthew

realpath fiilen linux dağıtımı olan GNU coreutils bir parçasıdır ve bu durumda kullanıcıların taşınabilirliği kırabilir farklı dış paketi yüklemiş olabilir
amenzhinsky

2
Her dağıtım realpath içermez. Örneğin, Linux Mint 17 (Ubuntu tabanlı) çalıştırıyorum ve varsayılan olarak sahip değil. Depolarda, ancak otomatik olarak yüklenmiyor. Gönderdiğim bağlantının tartıştığı buydu.
Matthew

Doğru olarak işaretlenen yanıt, başlık için en iyisi ve en genel olanı olmasına rağmen, belirtilen kullanım örneği için iyi bir çözüm. Benim için sondaki eğik çizgiyi bir URL'den kaldırmak istedim, böylece bu işe yaramazdı. Buradaki önerinizle ilgili olarak, deneyimlerimden bulduğum şey readlink -f, bunun biraz daha taşınabilir olduğu realpath. Ek / alternatif seçenekler için: linux.die.net/man/1/readlink
flungo

1
Bu benim için çalıştı:target=$(realpath -L --relative-base . $1)
Mattia72

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.