2016-10-11 78 views
2

我知道我可以做:分配默认值变量,如果一个未设置,猛砸

echo ${var:-4} 

打印4如果var为null,

但如何在这种情况下分配-n .. ?

echo ${var:--n}不起作用。

这虽然工作..

echo ${var:---n} 

但在这种情况下,它打印出--n,我需要它来打印-n

+2

'echo'简直是允许做什么** **当传递'-n'作为参数。请参阅[POSIX规范](http://pubs.opengroup.org/onlinepubs/009604599/utilities/echo.html):*“如果第一个操作数是”-n“,或者任何操作数包含反斜杠( '\')字符,结果是实现定义的“*”。当传递'-n'或任何带有文字反斜杠的内容时,'echo'可能会导致后空翻或杀死你的猫并仍然符合POSIX标准。遵循规范中APPLICATION USAGE部分的建议,并使用'printf'代替。 –

+0

[在bash中使用单个命令将默认值分配给shell变量](http://stackoverflow.com/questions/2013547/assigning-default-values-to-shell-variables-with-a-single-command在 - bash) –

+0

@ElmarPeise,...我不知道它是什么 - 直接的原因肯定是不同的,至少。 –

回答

8

问题不在于默认值,而是在echo-n对它有特殊含义(检查help echo)。使用printf代替:

printf '%s\n' "${var:--n}" 
+0

是的,我知道'-n'回声..但它现在没有发生在我的身边..有趣的是,这发生了副作用..如果我碰巧尝试与'$ {var: - a }',它会工作;) – branquito