Bash 변수에서 첫 글자를 얻는 방법은 무엇입니까?


88

$word때때로 단어 또는 문장 인 Bash 변수 가 있습니다. 예 :

word="tiger"

또는:

word="This is a sentence."

변수에서 찾은 첫 글자와 동일한 새로운 Bash 변수를 어떻게 만들 수 있습니까? 예를 들어, 위는 다음과 같습니다.

echo $firstletter
t

또는:

echo $firstletter
T

답변:


37
initial="$(echo $word | head -c 1)"

문제 설명에서 "처음"이라고 말할 때마다 head가능한 해결책이 될 수 있습니다.


8
-cPOSIX 헤드 에는 옵션 이 없습니다 : < unix.com/man-page/posix/1/head >.
gioele

9
이것은 첫 글자를 반환하지만 과잉이며 솔루션은 외부 유틸리티 (헤드)에 따라 다릅니다. 이것은 더 깨끗한 순수한 껍질에서 할 수 있습니다.
automatthias

26
위의 의견에서 지적한 이유 때문에 이것은 허용되는 대답이어서는 안됩니다. 실제 답변은 다음과 같습니다 . ${word:0:1}또는 ${word::1}.
noamtm

POSIX 준수를 위해 당신은 할 수 있습니다 echo "$word" | fold -w1 | head -n 1. printf '%.1s' "$X"또는 printf '%c' "$X"이것들은 모두 단일 v. 다중 바이트 문자 헛소리의 대상입니다.
phicr

잠깐만 요 head -c n. echo "fábio" | head -c 2제공 f� 하는이 I 추측 또 다른 문제, 그래서.
phicr


72
word=something
first=${word::1}

1
이 멋진 수 있지만 bash는 4.3.11에 나 zsh을 5.0.5으로도, 나를 위해 일을하지 않는 것
yoniLavi

1
GNU bash v4.3.11에서는 first문자로 설정됩니다 s. 으로 볼 수 있습니다 echo $s. 그래도 작동하지 않고 디버깅에 도움이 필요하면 입력 한 명령과 출력을 복사하여 붙여 넣으십시오.
Adam Liss

2
감사합니다 Adam, 내 잘못입니다. 이전에는 왜 작동하지 않았는지 알 수 없지만 GNU bash, v3.1.0으로 돌아가서 시도한 여러 버전의 bash에서 완벽하게 작동합니다. zsh에서는 여전히 작동하지 않지만 질문에 "bash"태그가 지정되어 있으므로 관련이 없습니다.
yoniLavi

후속 조치 및 확인에 감사드립니다! 당신을 위해 일하고있어서 다행입니다.
Adam Liss



2

sed여기 에 태그가 있으므로 sed답이 있습니다.

echo "$word" | sed -e "{ s/^\(.\).*/\1/ ; q }"

그것을 즐기는 사람들을 위해 플레이 바이 플레이

{

  • s: 대체 루틴 시작
    • /: 대체 할 항목 지정 시작
    • ^\(.\): 그룹 1의 첫 번째 캐릭터 캡처
    • .*:, 나머지 줄이 대체에 있는지 확인하십시오.
    • /: 대체 지정 시작
    • \1: 그룹 1 삽입
    • /: 나머지는 버립니다.;
  • q: sed이 블록이있는 경우 다른 행에 대해이 블록을 반복하지 않도록 종료 합니다.

}

재미 있었어요! :)당신은 또한 사용할 수있는 grep등하지만 당신이 있다면 마술 (magick) 여전히 IMO 더 나은 솔루션입니다. (나는 POSIX 변수 확장을 사용하려고 한 시간을 보냈지 만 할 수 없었습니다 )bash${x:0:1}:(


1

Bash 4 사용 :

x="test"
read -N 1 var <<< "${x}"
echo "${var}"
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.