这是我的脚本的简单版本,显示失败:
#!/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。
答案 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,否则它会使用你指定的默认值。