나는 가지고있다,
내.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 }