반응형
Bash 또는 UNIX 쉘에서 문자열의 첫 번째 문자를 확인하는 방법은 무엇입니까?
저는 UNIX에서 문자열의 첫 번째 문자가 "/"인지 확인해야하는 스크립트를 작성하고 있고, 그렇다면 분기입니다.
예를 들어 문자열이 있습니다.
/some/directory/file
1을 반환하고 싶습니다.
server@10.200.200.20:/some/directory/file
0을 반환합니다.
이를 수행하는 다양한 방법. 이중 괄호 안에 와일드 카드를 사용할 수 있습니다.
str="/some/directory/file"
if [[ $str == /* ]]; then echo 1; else echo 0; fi
하위 문자열 확장을 사용할 수 있습니다.
if [[ ${str:0:1} == "/" ]] ; then echo 1; else echo 0; fi
또는 정규식 :
if [[ $str =~ ^/ ]]; then echo 1; else echo 0; fi
대부분의 sh 기반 쉘과 호환되는 case 문도 고려하십시오.
case "$STRING" in
/*)
echo 1
;;
*)
echo 0
;;
esac
$ foo="/some/directory/file"
$ [ ${foo:0:1} == "/" ] && echo 1 || echo 0
1
$ foo="server@10.200.200.20:/some/directory/file"
$ [ ${foo:0:1} == "/" ] && echo 1 || echo 0
0
cut -c1
이것은 POSIX이며 case
나중에 필요할 경우 실제로 첫 번째 문자를 추출하는 것과는 다릅니다 .
myvar=abc
first_char="$(printf '%s' "$myvar" | cut -c1)"
if [ "$first_char" = a ]; then
echo 'starts with a'
else
echo 'does not start with a'
fi
awk substr
또 다른 POSIX이지만 덜 효율적인 대안입니다.
printf '%s' "$myvar" | awk '{print substr ($0, 0, 1)}'
printf '%s'
이스케이프 문자 문제를 방지하는 것입니다 : https://stackoverflow.com/a/40423558/895245 예 :
myvar='\n'
printf '%s' "$myvar" | cut -c1
\
예상대로 출력 됩니다.
${::}
POSIX가 아닌 것 같습니다.
반응형
'programing' 카테고리의 다른 글
Emacs Org-Mode 내보내기에서 밑줄-구독 비활성화 (0) | 2020.11.30 |
---|---|
HTML 코드를 트리거하지 않는 꺾쇠 괄호 (<) (0) | 2020.11.30 |
IntelliJ : 다음 오타로 이동 (0) | 2020.11.30 |
EC2 : 보안 그룹에 포트 8080을 추가하는 방법은 무엇입니까? (0) | 2020.11.30 |
스크럼에서 QA가 작동하는 방식을 이해하도록 도와주세요. (0) | 2020.11.30 |