bash中的子字符串失败:意外令牌“完成”附近的语法错误。

时间:2015-10-16 18:50:37

标签: bash comparison substring

我试图遍历日志文件并抓取一部分字符串。

日志文件包含:

Variable_name Value
Slave_running ON

首先,我需要查看当前行是否包含子串Slave_running(从位置0开始,长度为13个字符)。如果我得到一个匹配,那么我需要测试同一个字符串(14:2)右边的字符是什么。

这是我首次将子字符串打印到控制台的微弱尝试:

while read p; do
  echo ${$p:0:13}
done <slaverunning.log

返回:

syntax error near unexpected token `done'.   

我对bash substring语法错误的原因是什么?

2 个答案:

答案 0 :(得分:2)

首先,您的代码问题仅仅是一个语法问题,您$之前p只需要{之前的while read p; do echo ${p:0:13} done < slaverunning.log 。以下应该按预期工作:

awk '/^Slave_running/ { if ($2 == "ON") { print "running"; } }' slaverunning.log

那就是说,awk似乎更适合这个问题,就像这样:

parseFloat(document.getElementById("weight")).value

Bash字符串操作函数的一个很好的演练:http://www.thegeekstuff.com/2010/07/bash-string-manipulation/
熟悉Awk的好地方:http://www.grymoire.com/Unix/Awk.html

答案 1 :(得分:1)

存在语法错误,但它与意外令牌无关......

$p内的${...}错误,这应该会出现bad substitution错误:

  echo ${$p:0:13}

修复后,您的脚本应该可以正常工作:

while read p; do
  echo ${p:0:13}
done <slaverunning.log