如何在linux bash脚本中用“ - ”char(破折号)声明变量名

时间:2014-02-03 10:54:27

标签: linux bash

我写了如下的简单脚本

#!/bin/bash

auth_type=""

SM_Read-only="Yes"
SM_write-only="No"

echo -e  ${SM_Read-only}
echo -e  ${SM_Write-only}

if [ "${SM_Read-only}" == "Yes" ] && [ "${SM_Write-only}" == "Yes" ] 
then
    auth_type="Read Write"
else
    auth_type="Read"
fi

echo -e $auth_type

当我执行它时,我得到了错误的输出。

./script.bash: line 5: SM_Read-only=Yes: command not found
./script.bash: line 6: SM_write-only=No: command not found
only
only
Read

任何人都知道用“ - ”(破折号)声明变量的正确方法吗?

修改

从c代码获得响应并评估变量,例如

RESP=`getValue SM_ Read-only ,Write-only 2>${ERR_DEV}`
RC=$?
eval "$RESP"

从上面的脚本代码我的c二进制文件getValue知道该脚本需要Read-onlyWrite-only并在eval $RESP导致错误和我的脚本中将值返回到script.So我通过

访问变量
echo -e  ${SM_Read-only}
echo -e  ${SM_Write-only}

也会导致错误。

3 个答案:

答案 0 :(得分:6)

重命名变量名称,如下所示:

SM_Read_only="Yes"
SM_write_only="No"

请不要在中使用变量名称中的-减号,请参阅answer,了解如何在中设置正确的变量名称

但是,如果您根据其他输出生成代码,则只需使用处理其输出:

RESP=$(getValue SM_ Read-rule,Write-rule 2>${ERR_DEV}|sed "s/-/_/")
RC=$?
eval "$RESP"

答案 1 :(得分:4)

shell变量名中不允许使用

-。只有字母,数字和下划线,第一个字符必须是字母或下划线。

答案 2 :(得分:1)

我认为你的变量名称中只有短划线,只有字母,数字和“_” 尝试:

  

SM_Read_only

或者

  

SM_ReadOnly