날짜를 추가하고 주어진 문자로 단어를 구분하는 쉘 스크립트에 문자열을 전달하십시오.
스크립트는 다음과 같습니다.
#!/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>