bash脚本中字符串变量的奇怪行为......请帮忙!

时间:2010-08-03 10:27:17

标签: bash string

我对此感到疯狂......让我解释一下......

我有一个非常简单的Bash脚本,其中包含一个接收3个参数的函数。这些参数都是字符串。一切都工作正常,直到我必须将带有空格的字符串传递给函数。

我还有一些测试代码来调用该函数(其名称为substracFromFile):

# try the function

PATTERN=`echo -e '<Location test14>'`

echo "PATTERN IS $PATTERN"

HEADERPATTERN=`echo -e '<Location [a-zA-Z0-9]*>'`

echo "HEADERPATTERN IS $HEADERPATTERN"

FILE="subversion.conf"

echo "FILE IS $FICHERO"

substracFromFile $PATTERN $HEADERPATTERN $FILE

这个输出是:

PATTERN IS <Location prueba14>
HEADERPATTERN IS <Location [a-zA-Z0-9]*>
FILE IS subversion.conf
PATTERN ARGUMENT IS <Location
HEADERPATTERN ARGUMENT IS prueba14>
FILE ARGUMENT IS <Location
grep: <Location: No such file or directory
expr: syntax error

正如您所看到的,当参数传递给函数并且我将它们回显到屏幕时,它们会以某种方式在空白区域中分割出来......让我向您展示函数初始代码:

function substracFromFile
{

        PATTERN=$1

        HEADERPATTERN=$2

        FILE=$3

        # Debug only
        echo "HEADER ARGUMENT IS $PATTERN"

        # Debug only
        echo "HEADERPATTERN ARGUMENT IS $HEADERPATTERN"

        # Debug only
        echo "FILE ARGUMENT IS $FILE"

只要传递的字符串根本没有空格,这就很好用。当我调用函数字符串似乎没问题,但我不明白为什么一旦调用函数它们被拆分....我敢肯定这是非常沉闷的东西,但我只是不明白它...

提前致谢, 亚历

1 个答案:

答案 0 :(得分:1)

您的部分问题与其他部分不一致。例如:

FILE="subversion.conf"

echo "FILE IS $FICHERO"

但我认为这些只是在发布问题时发生的错误。

如评论中提到的 ghostdog74 ,您需要引用包含空格的变量。特别是,这一行应该在变量周围加上引号:

substracFromFile "$PATTERN" "$HEADERPATTERN" "$FILE"

此外,我不明白你为什么要使用echo来设置变量,例如这一行:

PATTERN=`echo -e '<Location test14>'`

这可能只是:

PATTERN='<Location test14>'

如果值有时会转义特殊字符,则可以使用以下方法之一:

PATTERN=$'value\nwith\tescapes'

将“value”换行符“with”标签“escapes”作为其值。

另外,我建议养成不使用全部大写变量名的习惯。这将减少名称与Bash内置变量冲突的可能性。