J'ai une chaîne comme sample.txt.pgp et je veux retourner sample.txt dans un script shell (mais, la longueur de la chaîne variera, donc, fondamentalement, tous les caractères avant le ".pgp"). Y a-t-il une fonction substr? Comme, si je l'ai fait substr('sample.txt.pgp', -4, 0)
, est-ce censé retourner sample.txt? En ce moment ce n'est pas, alors je me demande si j'ai la syntaxe erronée, ou peut-être que substr n'est pas une fonction?Sous-chaîne Unix dans un script shell?
Répondre
Vous pouvez utiliser basename
:
$ basename sample.txt.pgp .pgp
sample.txt
Utilisez des accents graves ou $()
pour mettre le résultat dans une variable si vous voulez:
$ FILE=sample.txt.pgp
$ VARIABLE=$(basename "$FILE" .pgp)
$ echo $VARIABLE
sample.txt
a='sample.txt.pgp'
echo ${a%.*} # sample.txt (minimal match)
echo ${a%%.*} # sample (maximal match)
Cela semble intéressant ... Quel est le signe dollar et% représentent? Avez-vous une page qui explique cela ou quoi que ce soit? – TwixxyKit
@KnockKnockWhosThere: Lisez http://www.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_06_02 pour plus d'informations. :-) –
Et une version plus contrainte: '$ {a% .pgp}' supprime seulement une extension '.pgp' si elle est présente; l'original supprimera toute extension (ce qui peut être utile dans certains cas). –
- 1. Expression régulière Script shell Unix
- 2. Lecture dans le répertoire, script shell Unix
- 3. Tableaux dans un shell Unix?
- 4. Convertir code ASCII en hexadécimal dans un script shell Unix
- 5. En ce qui concerne UNIX Shell Script
- 6. Script shell Unix avec commande Iseries
- 7. En ce qui concerne script shell Unix
- 8. Comment egrep script shell Unix variable
- 9. ## */Utilisation dans UNIX Shell Scripting
- 10. Comment convertir DATE UNIX TIMESTAMP en script shell sur MacOS
- 11. Get Date actuelle à l'époque du script shell Unix
- 12. script shell unix pour analyser les journaux en utilisant grep
- 13. Événements shell Unix?
- 14. Unix Shell Script affichant null dans un fichier texte lorsqu'il est ouvert dans le bloc-notes
- 15. Un script shell "try"
- 16. Unix - comment générer plusieurs scripts shell dans un répertoire?
- 17. Comment traiter quelque chose comme ça dans un shell Unix?
- 18. dans le script shell
- 19. comment déplacer des fichiers d'un chemin vers un autre chemin dans unix en utilisant shell-script
- 20. Comment utiliser des instructions de boucles dans un script shell Unix
- 21. Comment savoir si une chaîne contient une autre chaîne dans un script shell Unix?
- 22. Erreur logique dans l'aide Shell script.Please (UNIX)
- 23. Comment changer de shell dans unix
- 24. À propos de Shell Script
- 25. Que fait '-a' dans Unix Shell scripting
- 26. à l'aide bringue dans un script shell
- 27. Variables d'environnement globales dans un script shell
- 28. su et sudo dans un script shell
- 29. Appelez un script shell dans Java?
- 30. Comment puis-je utiliser des tableaux dans un shell Unix?
Intéressant que vous utilisiez la notation '-s suffixe'; cela n'est pas standardisé par POSIX; la notation classique serait '$ (basename $ file .pgp)' (en supposant que le nom soit conservé dans une variable '$ file'). –
@Jonathan Oui en effet! J'ai juste fait un 'man basename' sur ma machine OS X ici, et j'ai vu l'option' -s'; c'était un peu plus flexible (peut gérer plus d'une chaîne), je ne savais pas que ce n'était pas POSIX. Je vais modifier ma réponse. –
Modifié; J'ai également mis des guillemets doubles pour soutenir les espaces dans le nom de fichier. –