bash 배열 변수를 '.'로 구분된 문자열로 변환하시겠습니까?

bash 배열 변수를 '.'로 구분된 문자열로 변환하시겠습니까?

중복되지 않음질문.

요소가 1,0,0인 배열에서 semvar 패턴(1.0.0)을 만들고 git 태그를 만들려고 합니다 git tag $var.

오류:- 위의 솔루션은 작동하지 않고 공간을 분리 .하여 제공합니다 1 0 0.

4 13 0
fatal: too many params

git tag 명령에 오류가 발생했습니다.

접근하다:-

var=$( IFS=$'.'; echo "${versionArray[*]}" )
echo $var
git tag $var  

더 좋은 방법을 제안해주세요.

답변1

echo $var내 생각 엔 실행 하고 git tag $var사용하는 쉘입니다 IFS=.. Note는 var=$(IFS=.;…)현재 셸에서 변수 값을 변경할 수 없으므로 이 예상치 못한 설정은 IFS아마도 일부 시행착오 중에 더 일찍 설정되었을 것입니다.

내 말이 맞다면, 이름이 붙은 변수는 var예상 값을 점으로 표시합니다(예: ) 1.0.0. 하지만 이렇게 검색하면

echo $var

현재는 단어로 분할하는 데 사용되므로 , , IFS3 개의 별도 인수를 받습니다 . 그리고 그 사이에 단일 공백을 사용하여 인수를 인쇄하기 때문에 was 의 값이 인상 깊었습니다 .1.0.0echo100echovar1 0 0

이 줄

echo "$var"

에 의존하지 않습니다 IFS. 나는 그것이 당신에게 보여줄 것이라고 기대합니다 1.0.0.


일반적인 해결책은 변수를 큰따옴표로 묶는 것입니다. 너어쨌든 했어야 했어:

echo "$var"
git tag "$var"

또한 주의하세요 IFS. 이제 echo $IFS변수가 무엇인지 보여주지 않는다는 것이 분명해졌습니다 . echo "$IFS"더 나은. 또한 다음 방법도 유용합니다.

printf '%s' "$IFS" | hexdump -c
printf '%s' "$IFS" | hexdump -C
printf '%s' "$IFS" | xxd

관련 정보