无法使用 echo 打印 *(星号)值

无法使用 echo 打印 *(星号)值

我有,

my.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

您可以将 shell 脚本重写为

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

并完全避免所有 shell 处理(除了这里的单引号和$1您想要的参数扩展);甚至作为 AWK 脚本

#!/usr/bin/awk -f

BEGIN { FS="=" }

{ print $2 }

相关内容