Linux
無法使用 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 *
& 的命令,我們得到了錯誤的輸出,它給出了目前目錄上的文件列表作為輸出。是否有任何替代解決方案?
問題出
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 }