繁体   English   中英

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

[英]substring in bash failing: syntax error near unexpected token `done'.

我正在尝试遍历日志文件并获取一部分字符串。

日志文件包含:

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语法出错的错误是什么?

首先,你的代码的问题只是一个语法问题,你不需要在p之前的$ ,只有{ 以下应该按预期工作:

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

也就是说,awk似乎更适合这个问题,如下所示:

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

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

有一个语法错误,但它不是意外的令牌......

${...}$p是错误的,这应该会导致错误的bad substitution错误:

  echo ${$p:0:13} 

修复后,您的脚本应该工作:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM