ダッシュにバックスラッシュを使用して変数を印刷する

ダッシュにバックスラッシュを使用して変数を印刷する

私の殻はダッシュです。私の質問は次のとおりです。

# A="abc\nde fg"
# printf "$A"
abc
de fg#

# B="abc\\nde fg"
# printf "$B"
abc
de fg#

# C="abc\\\nde fg"
# printf "$C"
abc\nde fg# 

私が使用している文字列変数には、空白と他の\n空白文字の両方を含めることができます。文字列から変数を$Aエスケープせずに変数にアクセスしたいです。\n一重引用符を使用すると変数として解釈されませんが、二重引用符を使用するとこれらの特殊文字が解釈されます。

dash これを行う方法はシェルに組み込まれていますか?文字列のエスケープ文字を2倍にする外部プログラムに変数を送信できることを知っていますが、これは正しくないと思います。

編集する:

私は間違いを知っていますが、printfこの出来事とは何の関係もありません。最初は私を使っていましたecho。これは私が求めているもののより良い例です。以下は、2つの同じコマンドシーケンスです。ただし、最初はbashにあり、2番目はdashにあります。

強く打つ

$ cat sample.txt
abc\nde fg

some string

$ A=`cat sample.txt`
$ echo "$A"
abc\nde fg

some string
$ 

スプリント

$ cat sample.txt
abc\nde fg

some string

$ A=`cat sample.txt`
$ echo "$A"
abc
de fg

some string
$ 

\nこの一連のコマンドを解釈しないようにダッシュを取得できるかどうか疑問に思います。外部コマンドを使用して解決策を実装しました。正しく使用するとprintf望ましい効果が得られますが、ダッシュシェル自体でこれを行う方法があるかどうか疑問に思います。

完全性を期すためにこれが質問をする理由です。ファイルを読み、条件に応じて下のセクションにコメントを付けるか、コメントを削除する必要があります。最初の部分にはリテラル\n(改行文字ではない)があり、書き換えられたファイルにそのまま残す必要があります。

私はsedを使用してファイルを2つの部分に分割し、バックティックで囲み、変数に割り当てます。最後に、条件付きでコメントを付けたり、コメントを付けたり、そのままにしたりするなどの"$VAR1$VAR2"操作を実行して変数を連結します。$VAR2

ベストアンサー1

いいえ、バリエーションがたくさんありますechoechoポータブルコマンドではありません。

dash実際にはecho少数のUNIX互換実装の1つですecho(少なくともこの点ではdashマルチバイトをサポートしていないため、マルチバイトロケールをサポートするシステムと互換性がありません)。

UNIX 仕様要件

echo '\n'

2つの改行文字を出力し、

echo -e x

出力-e x<newline>

kshAT&Tなどの他の一部のシェルには、組み込みbashコマンドの動作を変更する設定がyashあります(GNUコマンドの動作は環境の影響を受ける可能性があります)。zshechoechodash

とにかく、echo任意のデータを出力するために使用したくありません。標準および移植可能なコマンドはですprintf

echoさまざまなラッパー機能を実装する方法を含む詳細については、次の回答で確認できます。printfなぜprintfがechoより優れているのですか?

おすすめ記事