[string] 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 $str 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가 아닌 것 같습니다.

참조 : 쉘 스크립팅에서 문자열의 처음 두 문자를 추출하는 방법은 무엇입니까?


답변