Debian Linuxでshとbashによって実行されるスクリプトがあります。
sh
次のechoコマンドは、3つのスペースを置き換えて呼び出すと完全に実行されます\t
。ただし、使用時には失敗しました#!/bin/bash
。
出力#/bin/sh echo "Hello\tworld"
Hello world
bash
次のechoコマンドは、3つのスペースを置き換えて呼び出すと完全に実行されます\t
。ただし、を使用して実行すると失敗します#/bin/sh
。
出力#/bin/bash echo -e "Hello\tworld"
Hello world
sh
\ tまたはbashを同じコマンドラインに置き換える方法はありますか?
答え1
タブが変数ではなくリテラルにあると仮定
printf 'Hello\tworld\n'
文字列が変数にある場合は、変数を最初の引数として渡さないことをお勧めします。これは、printf
変数のパーセント記号(%
)またはバックスラッシュ()をエスケープする必要があるためです。\
最良の方法は%b
フォーマット指定子として使用することですprintf
(@Stéphane Chazelasに感謝します)。
$ a='hello\tworld'
$ printf "%b\n" "$a"
hello world
$ printf "%b\n" "$a" | cat -A
hello^Iworld$