这是我的脚本的简单版本,显示失败:
#!/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.
你可以添加冒号:
: ${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)