Entfernen Sie ein Zeichen vom Ende einer Variablen


130

Bei der automatischen Bash-Vervollständigung wird ein / am Ende eines Verzeichnisnamens angehängt. Wie kann ich dies von einem Positionsparameter entfernen?

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

Antworten:




13

Ich denke, eine bessere Lösung zum Kanonisieren von Pfaden ist realpath $pathoder mit -mOption, wenn es nicht existiert. Diese Lösung entfernt automatisch unnötige Schrägstriche und fügt pwd hinzu


Realpath ist wahrscheinlich nicht sehr portabel: unix.stackexchange.com/questions/101080/…
Matthew

Realpath ist ein Teil von GNU Coreutils, der de facto in der Linux-Distribution enthalten ist. In diesem Fall haben Benutzer möglicherweise verschiedene externe Pakete installiert, die die Portabilität
beeinträchtigen

2
Nicht jede Distribution enthält Realpath. Zum Beispiel verwende ich Linux Mint 17 (das auf Ubuntu basiert) und es hat es standardmäßig nicht. Es befindet sich in den Repos, wird jedoch nicht automatisch installiert. Das war der Link, den ich gepostet habe.
Matthew

Gute Lösung für den angegebenen Anwendungsfall, obwohl die als korrekt gekennzeichnete Antwort die beste für den Titel und die allgemeinste ist. Für mich wollte ich den abschließenden Schrägstrich aus einer URL entfernen, damit dies nicht funktioniert hätte. In Bezug auf Ihren Vorschlag hier habe ich aus Erfahrung herausgefunden, dass dies readlink -fetwas tragbarer ist als realpath. Für zusätzliche / alternative Optionen: linux.die.net/man/1/readlink
flungo

1
Dies funktionierte für mich:target=$(realpath -L --relative-base . $1)
Mattia72

3

Seien Sie vorsichtig, bash3 hat perl-ähnlichen Regex zu bash hinzugefügt. Der erwähnte Leitfaden behandelt dies ebenso wie der offizielle Leitfaden bei GNU , aber nicht alle Referenzen tun dies.

Was habe ich getan?

Ersatz 2.19/*zu sein2.19 .

Lösung

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

Funktioniert nicht, Schrägstrich ist noch vorhanden (am Ende der Variablen, die Ihr Beispiel nicht hat).
Zelphir Kaltstahl
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.