일부 코드를 bash 함수로 대체하여 재사용하려고 합니다. 그래서 내 이전 코드는 다음과 같습니다.
#!/bin/bash
set aline=" dsfsdf | fsdfff | yuhfd "
set line_parsed=`echo $aline | tr '|' "\n"`
echo ${line_parsed[1]}
어느 출력 dsfsdf
.
이제 문장을 함수에 넣으려고 하면 제대로 이해되지 않습니다.
#!/bin/bash
parseLine ()
{
set line_parsed=`$echo $1 | tr '|' "\n"`
echo ${line_parsed[1]}
}
set aline=" dsfsdf | fsdfff | yuhfd "
parseLine $aline
문법적 오류가 있나요?
답변1
문자열에서 배열을 만들려면 다음을 사용하세요.
IFS='|' read -r -a line_parsed <<< "$aline"
IFS='|'
배시 설정내부 필드 구분 기호도착하다|
read
표준 입력 파일 설명자에서 읽기-r
백슬래시는 이스케이프 문자로 작동하지 않습니다.-a line_parsed
라는 파일을 만듭니다.line_parsed
<<< "$aline"
는여기에 있는 문자열, s의 내용을 표준 입력$aline
으로 전달합니다.read
이제 배열이 생겼습니다. echo "${line_parsed[0]}"
분할 문자열의 첫 번째 요소를 제공합니다.
이 모든 것이 하나의 기능으로 이루어집니다.
parseLine ()
{
IFS='|' read -r -a line_parsed <<< "$1"
echo "${line_parsed[0]}"
}
이제 다음과 같이 호출할 수 있습니다.
$ parseLine "dsfsdf | fsdfff | yuhfd "
dsfsdf