Bash:"命令未找到"简单的变量赋值

时间:2011-08-06 21:35:40

标签: bash

这是我的脚本的简单版本,显示失败:

#!/bin/bash
${something:="false"}
${something_else:="blahblah"}
${name:="file.ext"}

echo ${something}
echo ${something_else}
echo ${name}

当我回显变量时,我得到了我输入的值,但它也会发出错误。我做错了什么?

输出:

./test.sh: line 3: blahblah: command not found
./test.sh: line 4: file.ext: command not found
false
blahblah
file.ext

前两行正在向stderr发出,而接下来的三行正在输出到stdout。

我的平台是fedora 15,bash版本4.2.10。

3 个答案:

答案 0 :(得分:6)

您可以添加冒号:

: ${something:="false"}
: ${something_else:="blahblah"}
: ${name:="file.ext"}

使用“:”(无操作命令)的技巧是,没有任何内容被执行,但参数被扩展。就个人而言,我不喜欢这种语法,因为对于不了解这种技巧的人来说,代码很难理解。

您可以将此作为替代方案:

something=${something:-"default value"}

或更长,更便携(但恕我直言更可读):

[ "$something" ] || something="default value"

答案 1 :(得分:3)

将变量放在一行上将执行存储在变量中的命令。同时执行任务是偶然的。

简而言之,不要这样做。

echo ${something:="false"}
echo ${something_else:="blahblah"}
echo ${name:="file.ext"}

答案 2 :(得分:0)

只是

variable_name=value

如果你使用$(variable_name:=value} bash替换了variable_name,否则它会使用你指定的默认值。