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

관련 정보