变量中的 IFS 分隔符

变量中的 IFS 分隔符

将字符串传递给 shell 脚本,该脚本应添加日期并用给定字符分隔单词。

该脚本如下所示:

#!/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 shell 编程的新手,我不明白在将变量连接到字符串时如何保留分隔符。

我尝试了很多带或不带的组合“……”但我不明白这对变量实际上有什么作用。

答案1

以类似的方式$*在参数串联中插入一个字符未引用扩展从字符串中删除字符,并且每次删除都会将字符串分解为单独的参数。

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

相关内容