2016-10-11 5 views
2

に私は私が行うことができます知っている:変数に割り当てるデフォルト値を一が設定されていない場合は、bashの

echo ${var:-4} 

varがnullの場合4を印刷するには、

が、どのようにこの場合の-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に準拠する可能性があります。仕様のアプリケーション使用法のセクションの助言に従い、代わりに 'printf'を使用してください。 –

+0

[bashで単一のコマンドでシェル変数にデフォルト値を割り当てる](http://stackoverflow.com/questions/2013547/assigning-default-values-to-shell-variables-with-a-single-command) -in-bash) –

+0

@ElmarPeise、...それはわかりません - 直接的な原因は確かに違います。 –

答えて

8

問題はデフォルトではなく、echo-nには特別な意味があります(チェックhelp echo)。代わりにprintfを使用してください:

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

はい、私はエコーで '-n'を知っていましたが、現時点では私には起こりませんでした。興味深いことに、これは副作用として起こりました。もし' $ {var: - a } '、それは動作します;) – branquito

関連する問題