変数のIFS区切り記号

変数のIFS区切り記号

日付を追加し、指定された文字で単語を区切るシェルスクリプトに文字列を渡します。

スクリプトは次のとおりです。

#!/bin/bash

SEPARATOR=';'

# change separator
ORG_IFS="$IFS"
IFS=$SEPARATOR

# todays date
TODAY=$(date +"%d.%m.%Y")
echo "date: " $TODAY

# concatenate command line arguments
DATA_STRING="$*"
echo "data: " "$DATA_STRING" "(correct)"
echo "data: "  $DATA_STRING  "(wrong: missing separator)"

# date + command line arguments
FINAL_STRING="${TODAY}${SEPARATOR}"${DATA_STRING}""
echo "date+data: " $FINAL_STRING

# restore original separator
IFS=$ORG_IFS

呼び出しは次のとおりです。

myscript.sh apple banana cherry

これで出力は次のようになります。

date:  07.09.2019
data:  apple;banana;cherry (correct)
data:  apple banana cherry (wrong: missing separator)
date+data:  07.09.2019 apple banana cherry

必要な結果は次のとおりです。

07.09.2019;apple;banana;cherry

Linuxシェルプログラミングに初めて触れたので、変数を文字列に連結するときに区切り文字を保持する方法を理解していません。

有無にかかわらず、多くの組み合わせを試しました「…」しかし、これが実際に変数について何をしているのかわかりません。

答え1

同様に、$*パラメータ接続に文字を挿入します。引用しない拡張は、文字列から文字を削除して削除するたびに、文字列を別の引数で除算します。

$ var=1234567890
$ IFS=368
$ echo "$var" $var
1234567890 12 45 7 90
$ printf '<%s> ' "$var" $var
<1234567890> <12> <45> <7> <90>

関連情報