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=.も同様です。var=$(IFS=.;…)現在のシェルでは変数値を変更できないため、この予期しない設定はIFS、おそらく試行錯誤中に以前に設定されたはずです。

私の推測が正しければ、変数 にはvarドット付きの期待値が格納されます1.0.0。ただし、次のように取得すると

echo $var

現在の は単語にIFS分割するために使用されているため、 、、の 3 つの別々の引数を受け取ります。また、 は引数を 1 つのスペースで区切って出力するので、の値は であると誤解していました。1.0.0echo100echovar1 0 0

この行

echo "$var"

は に依存しませんIFS。 が表示されることを期待しています1.0.0


一般的な解決策は、変数を二重引用符で囲むことです。いずれにせよそうすべきだった:

echo "$var"
git tag "$var"

また、 にも注意してください。これで、 では変数が何であるかは表示されず、 の方が優れているIFSことが明らかになったはずです。さらに、次のメソッドも便利です。echo $IFSecho "$IFS"

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

関連情報