1

命令:

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

编辑 - 这个问题仍然存在。该代码在终端中运行良好,但在脚本中都失败了。

4

2 回答 2

2

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

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

并且 afaik 用 删除了额外的字符%?,所以它似乎根本没有改变任何东西。

改为尝试echo -n,它不会添加\n到字符串中:

value=`echo -n "$line" | awk '{print $4}'`
于 2012-10-08T09:26:41.897 回答
0

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

要查看 /bin/sh 的真正含义,您可以执行以下操作:ls -l /bin/sh。为了纠正这种情况,通过将顶部的 `shebang' 更改为`#!/bin/bash'来强制脚本在 bash 中运行

于 2012-10-11T17:30:10.147 回答