2015-01-21 7 views
2

'~'구분 기호로 매개 변수를 사용하고 문자열을 분할 한 후 값을 배열에 삽입하려고하는 스크립트를 작성하고 있습니다. 나는이 문제에 대해 꽤 많은 게시물을 가지고 있으며, 나는 거의 거기 있지만 거기에는 실패한 경우가있다. 여기에 세부 사항이 있습니다.마지막으로 비어있는 문자열은 delim에 의해 배열로 문자열을 분할 할 때 포함되지 않습니다.

myScript.sh

#!/bin/bash 
tmpIFS=$IFS 
IFS="~" 
array=($1) 
IFS=$tmpIFS 
echo "${#array[@]}" 

처형

내가 원하는 것입니다
$ ./myScript.sh "A~B" 
$ 2 

. 그러나 내가 할 때

$ ./myScript.sh "A~" 
$ 1 

나는 크기 2의 배열을 다시 가질 것이고 마지막 셀은 빈 문자열이 될 것으로 예상했다.

어떻게하면됩니까?

이 스크립트에서 일반적으로 달성하고자하는 것은 10 개의 쿼리 매개 변수를 전달하여 curl을 사용하여 http 요청을 수행하는 것입니다. 스크립트에 10 개의 매개 변수가있는 대신 지정된 순서로 문자로 구분 된 하나의 매개 변수로 데이터를 가져 오려고했습니다.

감사

+0

아마도 궁극적으로 달성하려는 내용에 대한 추가 정보가 포함 된 경우 몇 가지 대안을 제시 할 수 있습니다. –

+0

@TomFenech 질문이 업데이트되었습니다. – NikosDim

+1

스크립트에 10 개의 매개 변수가 있고 매개 변수 하나를 가지지 만 직접 분리하는 것의 차이점은 무엇입니까? './myScript.sh A B' 만하고'$ 1'과'$ 2'를 통해 당신의 주장에 접근 할 수 있습니다. './myScript.sh A '''또는'./myScript.sh A' 만했다면'$ 2'는 비어있게됩니다. –

답변

0

사용 ./script "A~ " 다음 마지막 요소는 "빈"입니다.

+0

이 경우 빈 문자열이 아니라 원하는 문자가 아닌 공백 문자가됩니다. 입력 매개 변수는 다른 응용 프로그램에서 올 수 있으므로 공간이 필요하지 않습니다. 덕분에 – NikosDim

+0

다음 엘리먼트에 액세스 할 때 나중에 트림 할 수 있습니다. 나는 bash가/.script A ~''와 같은 것이 없으면 마지막 요소를 처리하지 않을 것이라고 생각한다. –

+0

마지막으로 공백 문자를 얻으려면이 로그인을 모든 클라이언트에 추가해야합니다.이 클라이언트는 옳지 않은 것처럼 보입니다. 그것이 가능하지 않다면 완전히 다른 길을 따라야 할 것입니다. :( – NikosDim

3

~은 표현식에서 공백과 같이 처리되므로 쉘 확장 규칙에 따라 동작이 적절합니다. 공백 (변경 IFS을)을 고려,이 작품 왜

array=($1"") 

이해하려면 : 다음과 같은 해결 방법을 사용할 수 있습니다

array=(A B C) 
로 확장 $1 다음,

array=($1) 

A B C라고 가정

은 세 요소의 배열입니다. 반면에,

array=($1"") 

네 가지가 있습니다

array=(A B C "") 

로 확장됩니다. $1의 끝 부분에 공백이 없으면이 다시 (A B C)과 동일

array=(A B C"") 

로 확장됩니다.