0

我有一个将元素分配给workspace[i]相应“标签”的函数。例如,如果workspace[3]名称为“firefox”,它将在名称“firefox”下划线,如果没有,则没有下划线。在函数外部和主while循环内部,这完美地工作,如下所示:

# dummy assignment for workspace_raw[i]
workspace_raw[1]=firefox

# code without function
boolean_check=false

for (( i=0 ; i <= 15 ; i++ ))
do
    workspaces[i]="${workspace_raw[i]}"
    if [ "${workspaces[i]}" == "firefox" ] 
    then
        boolean_check=true
    else
        false 
    fi
done

if $boolean_check
then
    workspace_firefox="\u3firefox\u0"
else
    workspace_firefox="\u0firefox\u0"
fi

但是,将功能放入函数中并使用参数调用它绝对不会执行任何操作,但也不会显示错误。这是我在函数中使用的代码,它不起作用:

# dummy assignment for $workspace_raw[i]
workspace_raw[1]=firefox

# assign name for function argument
tag_name1=firefox

# the function
assign_workspace()
{
tag=$1
boolean_check=false

for (( i=0 ; i <= 15 ; i++ ))
do
    workspaces[i]="${workspace_raw[i]}"

    if [ "${workspaces[i]}" == "$tag" ] 
    then
        boolean_check=true
    else
        false 
    fi
done

if $boolean_check
then
     declare workspace_$tag="\u3test$tag\u0"
else
     declare workspace_$tag="\u0test$tag\u0"
fi
}

# call function with argument
assign_workspace $tag_name1

不知道该怎么做。由于该函数的代码在硬编码到主循环中时有效,所以我觉得我在代码的某个地方出现了语法错误。如有必要,这是整个脚本:http: //pastebin.com/39WmPUvi

谢谢您的帮助!

4

1 回答 1

3

declare默认情况下,在函数内部将创建一个局部变量。如果您希望workspace_$tag变量在该函数之外可用,请使用该-g标志。

if $boolean_check
then
     declare -g workspace_$tag="\u3test$tag\u0"
else
     declare -g workspace_$tag="\u0test$tag\u0"
fi
于 2013-06-22T09:56:41.543 回答