Bashで複数のスペースを持つ文字列を「触れない」方法は何ですか? [コピー]

Bashで複数のスペースを持つ文字列を「触れない」方法は何ですか? [コピー]

次のように変数を割り当てました。

MYCUSTOMTAB='     '

しかし、エコーで使用すると:

echo $MYCUSTOMTAB"blah blah"

または

echo -e $MYCUSTOMTAB"blah blah"

ただリターンシングルスペース残りの文字列は次のようになります。

 blah blah

変更せずに文字列全体を印刷するには?\t私の好みに比べて広すぎるので、カスタムインデントに使用したいと思います。

答え1

これを防ぐには、変数を二重引用符で囲む必要があります。フィールド分割、どちら食べるあなたのスペース:

$ MYCUSTOMTAB='     '
$ echo "${MYCUSTOMTAB}blah blah"
     blah blah

答え2

提案通りこの回答変数を引用するだけで十分です。

あなたの場合に引用符が必要な理由は、引用符がないと、bashがSplit + glob演算子を引用文に適用するためです$MYCUSTOMTAB。デフォルト値$IFSにはTAB文字が含まれているため、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より優れているのですか?

答え3

変数に二重引用符を使用する必要があると思います。

echo -e "$MYCUSTOMTAB"."blah blah"

答え4

あなたの質問にタグが付けられていることを知っていますが、bashとにかく最大の移植性と信頼性のために以下を使用します。

printf "%sblah blah\n" "$MYCUSTOMTAB" 

または

someString="blah blah"
printf "%s%s\n" "$MYCUSTOMTAB" "$someString"

関連情報