사용자로부터 일부 입력을 받아 이에 대한 세부 정보를 확인하고 있습니다.
예:
$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