シェルに依存しない方法で文字列の「\ t」をタブ文字に置き換えるにはどうすればよいですか? [コピー]

シェルに依存しない方法で文字列の「\ t」をタブ文字に置き換えるにはどうすればよいですか? [コピー]

Debian Linuxでshとbashによって実行されるスクリプトがあります。

  1. sh次のechoコマンドは、3つのスペースを置き換えて呼び出すと完全に実行されます\t。ただし、使用時には失敗しました#!/bin/bash
    #/bin/sh
    echo "Hello\tworld"
    
    出力
    Hello   world
    
  2. 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$

関連情報