분리-정합성 구체화하십시오 배열로 bash

배시 (bash 스크립트입니다 한 줄로 분할하려면 냥이라구 및 저장할 어레이에서는 싶다.

선.

Paris, France, Europe

이러한 권한이 싶다 배열에서 다음과 같습니다.

array[0] = Paris
array[1] = France
array[2] = Europe

39 로 속도를 사용하여 코드, command& 싶다 doesn& # 39, t, 간단한 일이 아니다. How can I do it?

질문에 대한 의견 (2)

이 질문에 대한 다른 어떤 식으로든 모두 틀린 것입니다.

[ 틀린 답을 # 1] (https://stackoverflow.com/a/10586169/4272464)


IFS=', ' read -r -a array 
해설 (12)

이것은 설정하지 않고 운행에서어떠한 IFS:

string="1:2:3:4:5"
set -f                      # avoid globbing (expansion of *).
array=(${string//:/ })
for i in "${!array[@]}"
do
    echo "$i=>${array[i]}"
done

이 아이디어는 flexlm*용 구체화하십시오 교체품:

${string//substring/replacement}

달러 대신 공백 후 하위 일치시킵니다 교체할 수 있는 모든 문자열을 사용하여 초기화하려면 어레이입니다:

(element1 element2 ... elementN)

참고: 이 질문에 대한 사용 [split+glob 작동자] (https://unix.stackexchange.com/q/108963/79743). 따라서 확대를 막기 위해 일부 문자 ('*' 등) 이 스크립트입니다 글 로빙 일시정지하려면 것이 좋습니다.

해설 (16)
t="one,two,three"
a=($(echo "$t" | tr ',' '\n'))
echo "${a[2]}"
해설 (9)

가끔 발생했습니까 다는일은 해당 방법이 나와 수락됨 오토메이티드 # 39 는 return.&lt, 마차, 특히, t 작동합니까 didn& 분리자의 경우 br&gt. 이러한 경우는 내가 이 방법으로 해결했다.

string='first line
second line
third line'

oldIFS="$IFS"
IFS='
'
IFS=${IFS:0:1} # this is useful to format your code with tabs
lines=( $string )
IFS="$oldIFS"

for line in "${lines[@]}"
    do
        echo "--> $line"
done
해설 (3)

이 값에 대해 대답을 한 line.&lt 수락됨 작동됨 br>; 여러 개의 변수를 경우 선:

string='first line
        second line
        third line'

모든 줄이 매우 다른 명령을 afaq 필요하다.

'읽을 때 boot-r 선. 책임질래 lines+ = ($ line&quot ";). ,, $ string&quot &lt 수행됨 &lt &lt &quot. '

또는 훨씬 간단해진다는 bash 리다레이 :


readarray -t lines 
해설 (2)

구분 문자 배열로 있다 '는 분할 다중 사용자 키를 문자열이어야 &quot ";'. 구분 문자 잘못 사용하여 멀티미디어 솔루션 'if' 모든 집합이 아니라 본질적으로 IFS 이후 이들 문자를 구체화하십시오.

할당할 경우, 그 중 하나에 끊어집니다. ',' IFS = &quot &quot 문자열이어야 ',' 또는 '&quot &quot "; 그 정확한 표현이 없는 조합을 &quot, '또는', '의 두 문자를 구분, &quot &quot.

Sed, awk 분할하려면 함께 사용할 수 있습니다 '' 또는 '' 문자열 처리 대체.


#!/bin/bash

str="Paris, France, Europe"
array=()
while read -r -d $'\0' each; do   # use a NUL terminated field separator 
    array+=("$each")
done < 
해설 (3)

이는 비슷한 외곽진입 의해 Jmoney38 사용하지만, sed:

string="1,2,3,4"
array=(`echo $string | sed 's/,/\n/g'`)
echo ${array[0]}
해설 (1)
  • 멀티 문자 구분 solution.* 순결케 배시

39 의 질문에 이 같이 지적했다, 다른 zone 이 스레드할 OP& 제공했음 예를 들면, 쉼표로 구분된 문자열 구문 배열로 수 있는지 여부를 밝히지 않은 그는 쉼표 구분, 단일 또는 멀티 문자 / 쥐들한테 관심을 가질 뿐 구분 문자를 구분.

구글 검색 결과 이상이 되는 경향이 있기 때문에 이 질문에 맨 위에 랭크, 내가 하고 싶은 강한 제공하십시오 판독기에서 구분, 그 이후 역시 질문에 대한 답을 언급된 여러 문자 하나 이상의 반응을 보였다.

39 의 경우, re you& 해결책을 찾기 위해 멀티 문자 구분 문제, 내가 & # 39 검토하든 제안하세요 말리카르쥔 M 의 사후, 특히 대응을 gniourf_gniourf

누가 이 세련된 개확장 매개변수입니다 순결케 BASH 이용하여 솔루션을 제공합니다.

#!/bin/bash
str="LearnABCtoABCSplitABCaABCString"
delimiter=ABC
s=$str$delimiter
array=();
while [[ $s ]]; do
    array+=( "${s%%"$delimiter"*}" );
    s=${s#*"$delimiter"};
done;
declare -p array

Https://partner. microsoft. [인용 주석문입니다 / referenced 게시물로의] [3]

Https://partner. microsoft. 인용 질문: 따라하기 name 을 문자열으로 분할합니다 멀티 문자 구분 bash?

[3]: https://stackoverflow.com/questions/40686922/howto-split-a-string-on-a-multi-character-delimiter-in-bash # comment82225797_47633817

해설 (1)

이 시도하시겠습니까

IFS=', '; array=(Paris, France, Europe)
for item in ${array[@]}; do echo $item; done

39 의 it& 단순해졌습니다. 스케쳐내 (또한 분리하십시오 쉼표), 너희가운데 추가할 수도 있습니다.

IFS=' ';declare -a array=(Paris France Europe)

하지만 그것 없이는 인할지 IFS) 이 추가되고 그들위에 명령취소할 작동하잖아 인스턴스입니다 신선한 배시

해설 (0)

이 게시물을 통해 볼 때, 다음과 같은 입력 왔는지 구문 분석 word1, word2.

같은 날 수 없었다. awk 사용하여 이를 해결했다. 도움이 된다면, 누군가.


STRING="value1,value2,value3"
array=`echo $STRING | awk -F ',' '{ s = $1; for (i = 2; i 
해설 (0)

이 방법은 날 OSX: "'배시 문자열 = &quot 1 2 3 4 5"; a 어레이입니다 너희가운데 = ($ 문자열) "' 구체화하십시오 경우 여러 가지 구분, 그냥 1 교체하여 및 공간. "'배시 문자열 = &quot 1.2,3.4,5"; 구분 = &quot "; a 어레이입니다 너희가운데 ($ ($ $ 구체화하십시오 tr &quot delimiter&quot, 에코, = &quot. ") "'

간단한 :-)

해설 (0)

또 다른 방법으로 이 수정 없이 IFS:


read -r -a myarray 
해설 (0)

Tr 분할하려면 구체화하십시오 꽂으십시오 어레이입니다 객체에는 명령을 사용할 수 있습니다. 모두 작동하잖아 MacOS 및 Linux


  #!/usr/bin/env bash
  currentVersion="1.0.0.140"
  arrayData=($(echo $currentVersion | tr "." "\n"))
  len=${#arrayData[@]}
  for (( i=0; i
해설 (0)

업데이트: # 39, t 이렇게 don& 문제로 인해 평가.

조금 덜 함께 가졌다.

IFS=', ' eval 'array=($string)'

예:

string="foo, bar,baz"
IFS=', ' eval 'array=($string)'
echo ${array[1]} # -> bar
해설 (6)

이:

countries='Paris, France, Europe'
OIFS="$IFS"
IFS=', ' array=($countries)
IFS="$OIFS"

#${array[1]} == Paris
#${array[2]} == France
#${array[3]} == Europe
해설 (4)
  • 39 의 Here& 내 해킹! *

예쁜 일인 것은 지루한 의해 분할 문장열 문장열 사용하여 내주었다. 어떤 일이 발생합니까 제한한 것은 우리가 작업하십시오 외곽진입 단 몇 건 (분할되었습니다 ";;;;; .&quot &quot /&quot &quot 의해 &quot. 우리는 및 드릴링됩니다) 또는 다양한 부작용은요 config. 출력입니다.

필요한 것이라고 믿고 있다 하지만 난 외곽진입 아래에 몇 가지 요구 사항을 대부분 작동합니까 기동 작전을 수행했다.


#!/bin/bash

# --------------------------------------
# SPLIT FUNCTION
# ----------------

F_SPLIT_R=()
f_split() {
    : 'It does a "split" into a given string and returns an array.

    Args:
        TARGET_P (str): Target string to "split".
        DELIMITER_P (Optional[str]): Delimiter used to "split". If not 
    informed the split will be done by spaces.

    Returns:
        F_SPLIT_R (array): Array with the provided string separated by the 
    informed delimiter.
    '

    F_SPLIT_R=()
    TARGET_P=$1
    DELIMITER_P=$2
    if [ -z "$DELIMITER_P" ] ; then
        DELIMITER_P=" "
    fi

    REMOVE_N=1
    if [ "$DELIMITER_P" == "\n" ] ; then
        REMOVE_N=0
    fi

    # NOTE: This was the only parameter that has been a problem so far! 
    # By Questor
    # [Ref.: https://unix.stackexchange.com/a/390732/61742]
    if [ "$DELIMITER_P" == "./" ] ; then
        DELIMITER_P="[.]/"
    fi

    if [ ${REMOVE_N} -eq 1 ] ; then

        # NOTE: Due to bash limitations we have some problems getting the 
        # output of a split by awk inside an array and so we need to use 
        # "line break" (\n) to succeed. Seen this, we remove the line breaks 
        # momentarily afterwards we reintegrate them. The problem is that if 
        # there is a line break in the "string" informed, this line break will 
        # be lost, that is, it is erroneously removed in the output! 
        # By Questor
        TARGET_P=$(awk 'BEGIN {RS="dn"} {gsub("\n", "3F2C417D448C46918289218B7337FCAF"); printf $0}' 
해설 (0)

또 다른 방법은 다음과 같습니다.

string="Paris, France, Europe"
IFS=', ' arr=(${string})

지금 당신의 요소는 저장됩니까 &quot arr"; 어레이입니다. 반복할 수 있는 요소:

for i in ${arr[@]}; do echo $i; done
해설 (1)

다른 외곽진입 다음과 같을 수 있습니다.

str="a, b, c, d"  # assuming there is a space after ',' as in Q
arr=(${str//,/})  # delete all occurrences of ','

39, & # 39 이 후에도 arr&. 4 개의 써줬지 배열입니다

39 이 doesn& 필요한 물건을 많이 읽고, t 처리 IFS 또는 기타 특수한 업그레이드됨 간단해진다는 및 직접.

해설 (1)