2013-10-09 29 views

risposta

8

In questo modo, ad esempio:

$ x="test.com/" 
$ [[ "$x" == */ ]] && echo "yes" 
yes 

$ x="test.com" 
$ [[ "$x" == */ ]] && echo "yes" 
$ 

$ x="test.c/om" 
$ [[ "$x" == */ ]] && echo "yes" 
$ 

$ x="test.c/om/" 
$ [[ "$x" == */ ]] && echo "yes" 
yes 

$ x="test.c//om/" 
$ [[ "$x" == */ ]] && echo "yes" 
yes 
+0

Impressionante. Cosa indica la stella? Questo otterrà un falso positivo se x ha più '/'? –

+0

@MildFuzz l'asterisco '*' indica "qualsiasi carattere". Quindi puoi anche fare '[[" $ x "== * m /]] && echo" sì "' che dirà di sì in questo caso, ma non in 'x =" test.comp/", per esempio. Per più '/' andrà bene, controlla i miei esempi aggiornati. – fedorqui

3

La sua condizione era leggermente errato. Quando si utilizza =~, il rh è considerato un modello, quindi si direbbe pattern e non /pattern/.

Saresti hanno ottenuto i risultati attesi se lei ha detto

if [[ $x =~ /$ ]] ; then 

invece di

if [[ $x =~ //$/ ]] ; then 
3

Puoi stringhe indice di Bash utilizzando ${var:index} e ${#var} per ottenere la lunghezza della stringa. Gli indici negativi si intende il movimento dalla fine per l'inizio della stringa in modo che -1 è indice dell'ultimo carattere:

if [[ "${x:${#x}-1}" == "/" ]]; then 
    # last character of x is/
fi 
+0

Gli indici negativi sono consentiti, ma è necessario uno spazio per distinguere l'espansione della sottostringa dall'espansione del valore predefinito: '$ {x: -1}'. In realtà non stai utilizzando un indice negativo, ma un indice positivo calcolato. – chepner

0

Si può fare questo modo generico usando stringhe bash $(string:offset:length} - length è facoltativo

#x è la lunghezza x

Pertanto

$n = 1  # 1 character 
last_char = ${x:${#x} - $n} 

Per i riferimenti futuri,

$ man bash 

ha tutto il fascino

$ {parametro: Offset: lunghezza}

Substring espansione. Si espande fino ai caratteri di lunghezza del parametro a partire dal carattere specificato dall'offset. Se la lunghezza è omessa, si espande nella sottostringa del parametro a partire dal carattere specificato dall'offset. lunghezza e offset sono aritmetiche espressioni ...

Problemi correlati