разделение строки в скрипте bash

разделение строки в скрипте bash

Я принимаю некоторые отзывы пользователей и проверяю их.

Пример:

$HOME/Documents/test/one.txt

Я принимаю указанную выше строку в качестве входных данных и хочу извлечь ее one.txt. Мне нужно продолжить работу one.txt.

решение1

@Jordanm уже дал вам канонический ответ, который работает для любой строки. Если вы имеете дело конкретно с путями, вы также можете использовать программы basenameи dirname:

   basename - strip directory and suffix from filenames
   dirname - strip last component from file name

Например:

$ file="$HOME/Documents/test/one.txt"
$ dir=$(dirname "$file");
$ name=$(basename "$file");
$ echo "The file called $name is in the directory $dir"
The file called one.txt is in the directory /home/terdon/Documents/test

решение2

Это обычная задача, с которой может справитьсярасширение параметрав любой оболочке POSIX.

path=$HOME/Documents/test/one.txt
file=${path##*/} # file contains one.txt

Другим распространенным методом является использование программы basename.

file=$(basename "$path")

Единственный недостаток — необходимость порождать внешнюю программу. Главное преимущество — она правильно обрабатывает пути с конечным /.

решение3

Если вы делаете это с именами файлов, используйте basenameкоманду:

$ basename $HOME/Documents/test/one.txt
one.txt

Дальше:

$ FILE=$(basename basename $HOME/Documents/test/one.txt)
$ echo $FILE
one.txt

Если вам нужно разделить произвольные строки с произвольными разделителями, это немного магии. Считайте строку в массив и установите разделитель поля ввода на разделитель.

Вот пример:

$ IFS='/' read -a my_array <<< "$HOME/Documents/test/one.txt"
$ ARRAY_LENGTH=$(( ${#my_array[@]} - 1 ))
$ echo "${my_array[$ARRAY_LENGTH]}"
one.txt

Связанный контент