Rimuovi un carattere dalla fine di una variabile


130

Il completamento automatico di Bash aggiunge un / alla fine del nome di una directory. Come posso eliminare questo da un parametro posizionale?

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

Risposte:




13

Penso che la soluzione migliore per canonizzare i percorsi sia realpath $patho con l' -mopzione se non esiste. Questa soluzione rimuove automaticamente le barre non necessarie e aggiunge pwd


è probabile che realpath non sia molto portabile: unix.stackexchange.com/questions/101080/…
Matteo

realpath è una parte dei coreutils GNU che è di fatto nella distribuzione di Linux e in questo caso gli utenti potrebbero aver installato diversi pacchetti esterni che possono
compromettere

2
Non tutte le distro includono realpath. Ad esempio, sto usando Linux Mint 17 (che è basato su Ubuntu) e non lo ha di default. È nei repository, ma non viene installato automaticamente. Ecco di cosa parlava il link che ho pubblicato.
Matteo,

Buona soluzione per il caso d'uso specificato sebbene la risposta contrassegnata come corretta sia la migliore per il titolo e più generica. Per me volevo rimuovere la barra finale da un URL in modo che non avrebbe funzionato. Per quanto riguarda il tuo suggerimento qui, quello che ho scoperto per esperienza è che readlink -fè un po 'più portatile di realpath. Per opzioni aggiuntive / alternative: linux.die.net/man/1/readlink
flungo

1
Questo ha funzionato per me:target=$(realpath -L --relative-base . $1)
Mattia72

3

Fai attenzione, bash3 ha aggiunto regex perl-simile a bash. La guida menzionata copre questo e la guida ufficiale di GNU , ma non tutti i riferimenti lo fanno.

Cosa ho fatto?

Sostituire 2.19/*per essere 2.19.

Soluzione

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

Non funziona, la barra è ancora lì (alla fine della variabile, che il tuo esempio non ha).
Zelphir Kaltstahl
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.