命令在脚本中无法正常运行

时间:2012-10-08 09:09:34

标签: bash

命令:

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 echo $值行返回相同的内容。

编辑 - 这个问题仍然存在。代码在终端中运行细线bu线,但是在脚本中它们一起失败。

2 个答案:

答案 0 :(得分:2)

Echo在此行中为$ value添加了一个额外的行字符:

value=`echo "$line" | awk '{print $4}'`

并且afaik使用%?删除了额外的字符,所以它似乎根本不会改变任何内容。

请尝试echo -n,而不是将\n添加到字符串中:

value=`echo -n "$line" | awk '{print $4}'`

答案 1 :(得分:0)

由于您只提供了代码中的相关部分而不是整个文件,因此我假设文件的第一行显示`#!/ bin / sh'。这是你的问题。您要做的事情(参数扩展)特定于bash,所以除非 / bin / sh 指向通过符号链接进行bash,否则您在shell中运行该脚本,该shell不理解bash参数扩张。

要查看/ bin / sh究竟是什么,您可以这样做: ls -l / bin / sh 。为了纠正这种情况,通过更改顶部的“shebang”来强制脚本在bash中运行,以读取`#!/ bin / bash'