命令:
value=${value%?}
将从变量中删除最后一个字符。有什么合乎逻辑的原因为什么它不能在脚本中工作吗?在我的脚本中,它没有任何效果。
if [[ $line =~ "What I want" ]]
then
if [[ $CURRENT -eq 3 ]]
then
echo "line is " $line
value=`echo "$line" | awk '{print $4}'`
echo "value = "$value
value=${value%?}
echo "value = $value "
break
fi
fi
我不能发布整个脚本,但这是我所指的片段。循环输入正确,但 2 个回显$value行返回相同的内容。
编辑 - 这个问题仍然存在。该代码在终端中细行工作,但在脚本中一起失败。
中添加了一个额外的行字符$value:
value=`echo "$line" | awk '{print $4}'`
并且 afaik 多余的字符被%?
删除,所以它似乎根本没有改变任何东西。
请尝试改用echo -n
,这不会向字符串添加n
:
value=`echo -n "$line" | awk '{print $4}'`
由于您只提供了代码中的相关部分,而不是整个文件,因此我假设文件的第一行为"#!/bin/sh"。这是你的问题。您尝试执行的操作(参数扩展)特定于 bash,因此除非/bin/sh 通过符号链接指向 bash,否则您正在不理解 bash 参数扩展的 shell 中运行脚本。
要了解/bin/sh 到底是什么,你可以这样做:ls -l/bin/sh。为了纠正这种情况,通过将顶部的"shebang"更改为"#!/bin/bash"来强制脚本在 bash 中运行