2011-01-28 4 views
0

Si j'exécutez la commande suivante dans un shell bash:modificateurs dans le script Bash

./script /path/to/file.txt 
echo !$:t 

il émet file.txt et tout est bon.

Si dans mon script je:

echo $1:t 

il émet /path/to/file.txt:t

Comment puis-je obtenir à file.txt de sortie selon le comportement que je vois dans une coquille? Merci d'avance.

+0

Quelle est la première ligne du script? Commence probablement par '#! ... '... –

Répondre

1

Utilisez la syntaxe d'extension des paramètres:

echo ${1##*/} 
1

En bash vous pouvez utiliser le ${1##*/} expansion pour obtenir le nom de base du fichier avec tous les composants de chemin a été enlevé:

$ set -- /path/to/file 
$ echo "$1" 
/path/to/file 
$ echo "${1##*/}" 
file 

Vous pouvez l'utiliser dans un script aussi:

#!/bin/sh 

echo "${1##*/}" 

Alors que ${1##*/} fonctionnera lorsque Bash est appelé /bin/sh, d'autres fonctionnalités Bash nécessitent que vous utilisiez #!/bin/bash au début de votre script. Cette notation peut également ne pas être disponible dans d'autres shells.

Une solution plus portable est la suivante:

#!/bin/sh 

echo `basename "$1"` 
1

Modificateur ne fonctionne que sur word designators

+0

+1. (... qui fait partie de l'expansion de l'histoire.) –