私はこのような変数を割り当てました:
MYCUSTOMTAB=' '
しかし、両方のエコーでそれを使用します:
echo $MYCUSTOMTAB"blah blah"
または
echo -e $MYCUSTOMTAB"blah blah"
シングルスペースと残りの文字列を返すだけです。
blah blah
文字列全体をそのまま印刷するにはどうすればよいですか? \t
は幅が広すぎるため、カスタムインデントに使用したいと思います。
変数を二重引用符で囲んで フィールド分割 を防止しますateスペース:
$ MYCUSTOMTAB=' '
$ echo "${MYCUSTOMTAB}blah blah"
blah blah
この答え で示唆されているように、変数を引用するだけで十分です。
あなたのケースで引用が必要な理由は、bashを使用しないと、split + glob演算子が_$MYCUSTOMTAB
_の展開に適用されるためです。 _$IFS
_のデフォルト値にはタブ文字が含まれているため、_echo -e $MYCUSTOMTAB"blah blah"
_では、_$MYCUSTOMTAB
_は何にも分割されないので、記述した場合と同じになります。
_echo -e "blah blah"
_
(おそらく_-e
_はここでは必要ありません)。
printf
の代わりにecho
を使用することもできます。
_printf '%s\n' "$MYCUSTOMTAB"
printf '%s\n' "${MYCUSTOMTAB}blah blah"
_
または、printf
で_\n
_と同じ種類の_\t
_、_echo -e
_拡張を実行する場合は、_%b
_の代わりに_%s
_を使用します。
_printf '%b\n' "${MYCUSTOMTAB}blah blah"
_
参考までに printfがechoよりも優れている理由
変数には二重引用符を使用する必要があると思います
echo -e "$MYCUSTOMTAB"."blah blah"
あなたの質問にbash
のタグが付いていることは知っていますが、とにかく、移植性と信頼性を最大にするために、以下を使用します。
printf "%sblah blah\n" "$MYCUSTOMTAB"
または
someString="blah blah"
printf "%s%s\n" "$MYCUSTOMTAB" "$someString"