Linux

無法使用 echo 列印 *(星號)值

  • December 17, 2018

我有,

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 *& 的命令,我們得到了錯誤的輸出,它給出了目前目錄上的文件列表作為輸出。

是否有任何替代解決方案?

問題出echo $line在後面的引號內。雙引號變數以防止萬用字元擴展:

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

您可以將您的 shell 腳本重寫為

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

並完全避免所有shell處理(除了這裡的單引號和$1你想要的參數擴展);甚至作為 AWK 腳本

#!/usr/bin/awk -f

BEGIN { FS="=" }

{ print $2 }

引用自:https://unix.stackexchange.com/questions/489500