[string] 쉘에서 문자열의 마지막 문자를 얻는 방법은 무엇입니까?
문자열의 마지막 문자를 얻기 위해 다음 줄을 작성했습니다.
str=$1
i=$((${#str}-1))
echo ${str:$i:1}
다음을 위해 작동합니다 abcd/
.
$ bash last_ch.sh abcd/
/
다음 에서는 작동하지 않습니다abcd*
.
$ bash last_ch.sh abcd*
array.sh assign.sh date.sh dict.sh full_path.sh last_ch.sh
그것은 현재 폴더에있는 파일을 나열합니다 .
답변
이것이 변수를 인용해야하는 이유 중 하나입니다.
echo "${str:$i:1}"
그렇지 않으면 bash는 변수를 확장하고이 경우 인쇄하기 전에 globbing을 수행합니다. 매개 변수를 스크립트에 인용하는 것이 좋습니다 (일치하는 파일 이름이있는 경우).
sh lash_ch.sh 'abcde*'
bash 참조 매뉴얼 의 확장 순서도 참조하십시오 . 변수는 파일 이름 확장 전에 확장됩니다.
마지막 문자를 얻으려면 -1
음수 인덱스가 문자열의 끝에서 계산되므로 인덱스로 사용해야 합니다.
echo "${str: -1}"
콜론 ( :
) 뒤의 공백 은 필수입니다.
이 접근 방식은 공간 없이는 작동하지 않습니다.
답변
@perreal에 따르면 변수를 인용하는 것이 중요하지만 주석에서 당면한 질문에 대한 더 간단한 접근 방식을 찾기 전에이 게시물을 5 번 읽었 기 때문에 …
str='abcd/'
echo "${str: -1}"
산출: /
str='abcd*'
echo "${str: -1}"
산출: *
위에 참여 해주신 모든 분들께 감사드립니다. 스레드 전체에 적절하게 +1을 추가했습니다!
답변
나는 이것이 매우 오래된 스레드라는 것을 알고 있지만 아무도 나에게 가장 깨끗한 대답이라고 언급하지 않았습니다.
echo -n $str | tail -c 1
(가) 주 -n
에코가 마지막에 개행 문자가 포함되어 있지 않습니다 만, 그래서이다.
답변
awk 스크립트를 사용하는 또 다른 솔루션 :
마지막 1 자 :
echo $str | awk '{print substr($0,length,1)}'
마지막 5 자 :
echo $str | awk '{print substr($0,length-5,5)}'
답변
한 줄:
${str:${#str}-1:1}
지금:
echo "${str:${#str}-1:1}"
답변
지금까지의 모든 대답은 질문에서 “shell”이라는 단어가 Bash와 동일하다는 것을 의미합니다.
이것은 표준 Bourne 쉘에서이를 수행하는 방법입니다.
printf $str | tail -c 1
답변
시험:
"${str:$((${#str}-1)):1}"
예 :
someone@mypc:~$ str="A random string*"; echo "$str"
A random string*
someone@mypc:~$ echo "${str:$((${#str}-1)):1}"
*
someone@mypc:~$ echo "${str:$((${#str}-2)):1}"
g