에코를 사용하여 *(별표) 값을 인쇄할 수 없습니다.

에코를 사용하여 *(별표) 값을 인쇄할 수 없습니다.

나는 가지고있다,

내.sh

while IFS= read -r line ; do
v1="$line";
t1=`echo $line | awk -F= '{print $2}'`
echo "$t1"
done < $1

샘플.txt

say=hello
test=0 0/15 * * * ?
logs=valuelogs

산출:

[root@centos gen]# ./my.sh test.txt
hello
0 0/15 hello.txt 2.txt tmp.log my.sh sample.txt test.sh test.txt hello.txt 
2.txt tmp.log my.sh sample.txt test.sh test.txt hello.txt 2.txt tmp.log 
my.sh sample.txt test.sh test.txt ?
valuelogs

여기서는 echo *현재 디렉터리의 파일 목록을 출력으로 제공하는 &와 같은 명령 실행으로 인해 잘못된 출력이 표시됩니다.

동일한 대체 솔루션이 있습니까?

답변1

문제는 echo $line끝부분의 따옴표에 있습니다. 와일드카드 확장을 방지하기 위한 큰따옴표 변수:

t1=`echo "$line" | awk -F= '{print $2}'`

답변2

쉘 스크립트를 다음과 같이 다시 작성할 수 있습니다.

awk -F= '{print $2}' "$1"

AWK 스크립트인 경우에도 모든 쉘 처리를 완전히 피하십시오(여기서는 작은따옴표와 $1원하는 매개변수 확장 제외).

#!/usr/bin/awk -f

BEGIN { FS="=" }

{ print $2 }

관련 정보