将字符串传递给 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>