Shell 意外的令牌错误:awk

Shell 意外的令牌错误:awk,shell,awk,Shell,Awk,嗨,我用这个代码片段 输入一个文件,计算每行中的制表符数,并将结果打印到输出文件,但我得到了错误 awk:cmd。行:1:意外令牌 可能是什么错误 #!/bin/sh # FILE='unit-1-slide.txt' OUTPUTFILE='output-for'-$FILE COUNT=$(awk '{print gsub(/\t/,"")}'$FILE) OUTPUT_PATH='/home/user/Desktop' echo $COUNT > $OUTPUTFILE echo "

嗨,我用这个代码片段 输入一个文件,计算每行中的制表符数,并将结果打印到输出文件,但我得到了错误

awk:cmd。行:1:意外令牌

可能是什么错误

#!/bin/sh
#
FILE='unit-1-slide.txt'
OUTPUTFILE='output-for'-$FILE
COUNT=$(awk '{print gsub(/\t/,"")}'$FILE)
OUTPUT_PATH='/home/user/Desktop'
echo $COUNT > $OUTPUTFILE
echo "Done!"

中的
$FILE
之前缺少一个空格

COUNT=$(awk '{print gsub(/\t/,"")}'$FILE)

因此,文件名被视为awk脚本的一部分。shell执行删除引号时引号将被删除,而不是替换为空格。

按照惯例,所有大写变量名都保留给导出的变量。此外,始终引用变量(例如,
“$FILE”
,而不是
$FILE
),以避免文件名扩展等带来的不良后果。最后,awk命令可以更清楚地写成
awk-F'\t'{print NF}'