2017-03-21 3 views
3

에서 I 기본적 쉼표로 구분 요소 문자열 소스의 변수가하면서 : I는 입력에 사용자에게 이러한 소스들 각각에 대한 하나의 수신을 원하지연결할 입력 루프

SOURCES="a b c d e" 

, 그리고 I 따라서이 입력을 위와 같지만 대상을 포함하는 문자열에 저장하려고합니다. 나는 등 A = 1, B = 2 ... 할당 할 경우, 나는이 같은 것이다 : 위의 작업을 수행하기 위해

echo $DESTINATIONS >>> "1 2 3 4 5" 

를, 내가 이렇게 :

SOURCES="a b c d e" 
DESTINATIONS="" 

for src in $SOURCES 
do 
    echo Input destination to associate to the source $src: 
    read dest 
    DESTINATIONS=$DESTINATIONS $dest 
done 

그러나 , echo$DESTINATIONS에 작성하면 빈 상태가됩니다. 내가 잘못

-bash: = **myInput**: command not found 

어떤 생각 : 는 또한, 각 루프에서, 내 껍질은 나에게 말한다?

+0

'SOURCES'에 쉼표가 구분되어 있지 않습니까? 그냥 공간이 분리 되었습니까? – Inian

답변

3
SOURCES="a b c d e" 
DESTINATIONS="" 

for src in $SOURCES 
do 
    echo Input destination to associate to the source $src: 
    read dest 
    DESTINATIONS+=" ${dest}" 
done 
echo $DESTINATIONS 

이 맞습니다.

DESTINATIONS=$DESTINATIONS $dest 

오히려 위의 라인이 작성되어야한다 :

+0

고마워요. "dutiona":) –

2

코드와 가장 눈에 띄는 문제는이 라인

DESTINATIONS="$DESTINATIONS $dest" 

문제 : 당신은 $ 이명 령을 실행하고 환경을 전달하는 DESTINATIONS = $ DESTINATIONS 중 하나입니다. 이것은 당신이보고있는 오류 메시지를 잘 설명합니다.

내가 제안한 따옴표로 코드를 시도했지만 정상적으로 작동합니다.

3

구분 된 문자열이 아닌 배열을 사용해야합니다.

sources=(a b c d e) 

for src in "${sources[@]}" 
do 
    read -p "Input destination to associate to the source $src" dest 
    destinations+=("$dest") 
done 

printf '%s\n' "${destinations[@]}" 
1

Q : 무엇이 잘못 되었나요?
A : 필요한 경우 따옴표를 사용하지 마십시오.

인용 부호가없는 공간을 사용하면 쉘에서 줄을 분리하는 데 사용됩니다.

당신이 사용하는 경우 :

이 변수 $ 이명 령이 실행 명령으로 쉘에 의해 이해된다
DESTINATIONS=$DESTINATIONS $dest 

, 즉 오류 얻고있는 이유는 다음과 같습니다

-bash: = **myInput**: command not found 

이 문제를 해결하기를, 그냥 그 공간을 인용하십시오.
그렇게 할 수있는 방법은 여러가지 방법이 있습니다 :

DESTINATIONS=$DESTINATIONS" "$dest 
DESTINATIONS=$DESTINATIONS' '$dest 
DESTINATIONS="$DESTINATIONS"' '"$dest" 
DESTINATIONS="$DESTINATIONS $dest" 

마지막 옵션은 아마 가장 간단하고도 최고의 전반적인입니다.
당신은 (bash는 3.1 알파 1 이후)이 구문을 사용할 수 있습니다 또한

DESTINATIONS+=" $dest" 

, 제발!, 다른 확장을 인용하십시오 :

echo "$DESTINATIONS"