IFS="," を使用してシェルからコンマ区切り値を出力する方法

IFS="," を使用してシェルからコンマ区切り値を出力する方法

IFSを使用するときにコンマ区切りの出力を提供しない小さなスクリプトがありますが、他の多くの値を読み取るにはIFSが必要なので必須です。次のスクリプトの出力は次のとおりですが、odi_server1 odi_server2コンマで区切る必要があります。

#Script Starts
#!/bin/sh

IFS=","
odi_cluster=odi_server1,odi_server2;
echo $odi_cluster;

#Script Ends

電流出力=odi_server1 odi_server2

予想出力 =odi_server1,odi_server2

注: -IFS=","必須項目なので削除できません。

答え1

$odi_cluster呼び出し時に引用符を使用しないため、シェルechoは変数の値をにも表示される文字に分割します$IFS(その後、結果の単語に対してファイル名のグロービングを実行します)。通常、$IFSスペース、タブ、改行が含まれていますが、カンマにリセットしました。

変数の値odi_server1,odi_server2$IFSコンマが含まれている場合、この分割によって2つの単語odi_server1とが生成されますodi_server2。これはecho2つの別々の引数として提供され、echoユーティリティはそれを区切った空白として出力します。

出力に影響を与えないようにするには、シェルが引用符IFS拡張機能を介して変数値を分割しないようにしてください。

echo "$odi_cluster"

または

printf '%s\n' "$odi_cluster"

関連:

以下を呼び出して、組み込みユーティリティIFSに対してのみ変数を設定できます。readread

IFS=, read ...

これにより、IFS残りのスクリプトにデフォルト以外の値を設定することを防ぐことができます。

また関連することができます:

また、行の - 文字の合計は#ファイルの最初の文字でなければなりません。同じ行に他の文がない限り、各文はaで終わる必要はありません。!#!;

関連情報