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
这个returns:
syntax error near unexpected token `done'.
bash 子字符串语法有误吗?
存在语法错误,但这与意外标记无关...
${...}
里面的$p
是错误的,这个应该给出bad substitution
错误:
echo ${$p:0:13}
修复后,您的脚本应该可以运行:
while read p; do
echo ${p:0:13}
done <slaverunning.log
首先,您的代码问题只是语法问题,您不需要 p
之前的 $
,只需要 {
之前。以下应按预期工作:
while read p; do
echo ${p:0:13}
done < slaverunning.log
也就是说,awk 似乎更适合这个问题,像这样:
awk '/^Slave_running/ { if ( == "ON") { print "running"; } }' slaverunning.log
Bash 的字符串操作函数的精彩演练:http://www.thegeekstuff.com/2010/07/bash-string-manipulation/
熟悉Awk的好地方:http://www.grymoire.com/Unix/Awk.html
我正在尝试遍历日志文件并获取字符串的一部分。
日志文件包含:
Variable_name Value
Slave_running ON
首先,我需要查看当前行是否包含子字符串 Slave_running
(从位置 0 开始的 13 个字符长)。如果我得到匹配项,那么我需要测试同一字符串 (14:2) 右侧的字符是什么。
这是我第一次尝试将子字符串打印到控制台的微弱尝试:
while read p; do
echo ${$p:0:13}
done <slaverunning.log
这个returns:
syntax error near unexpected token `done'.
bash 子字符串语法有误吗?
存在语法错误,但这与意外标记无关...
${...}
里面的$p
是错误的,这个应该给出bad substitution
错误:
echo ${$p:0:13}
修复后,您的脚本应该可以运行:
while read p; do
echo ${p:0:13}
done <slaverunning.log
首先,您的代码问题只是语法问题,您不需要 p
之前的 $
,只需要 {
之前。以下应按预期工作:
while read p; do
echo ${p:0:13}
done < slaverunning.log
也就是说,awk 似乎更适合这个问题,像这样:
awk '/^Slave_running/ { if ( == "ON") { print "running"; } }' slaverunning.log
Bash 的字符串操作函数的精彩演练:http://www.thegeekstuff.com/2010/07/bash-string-manipulation/
熟悉Awk的好地方:http://www.grymoire.com/Unix/Awk.html