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

bea*_*mit 4 bash

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

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

echo ${something}
echo ${something_else}
echo ${name}
Run Code Online (Sandbox Code Playgroud)

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

输出:

./test.sh: line 3: blahblah: command not found
./test.sh: line 4: file.ext: command not found
false
blahblah
file.ext
Run Code Online (Sandbox Code Playgroud)

前两行被发送到stderr,而接下来的三行被输出到stdout.

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

Mic*_*jer 6

你可以添加冒号:

: ${something:="false"}
: ${something_else:="blahblah"}
: ${name:="file.ext"}
Run Code Online (Sandbox Code Playgroud)

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

您可以使用此替代方法:

something=${something:-"default value"}
Run Code Online (Sandbox Code Playgroud)

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

[ "$something" ] || something="default value"
Run Code Online (Sandbox Code Playgroud)