변수의 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>

관련 정보