![Bash 스크립트에서 문자열 분할](https://linux55.com/image/51056/Bash%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EC%97%90%EC%84%9C%20%EB%AC%B8%EC%9E%90%EC%97%B4%20%EB%B6%84%ED%95%A0.png)
사용자의 의견을 듣고 관련 세부정보를 확인하고 있습니다.
예:
$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