私の殻はダッシュです。私の質問は次のとおりです。
# 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
いいえ、バリエーションがたくさんありますecho
。echo
ポータブルコマンドではありません。
dash
実際にはecho
少数のUNIX互換実装の1つですecho
(少なくともこの点ではdash
マルチバイトをサポートしていないため、マルチバイトロケールをサポートするシステムと互換性がありません)。
UNIX 仕様要件
echo '\n'
2つの改行文字を出力し、
echo -e x
出力-e x<newline>
。
ksh
AT&Tなどの他の一部のシェルには、組み込みbash
コマンドの動作を変更する設定がyash
あります(GNUコマンドの動作は環境の影響を受ける可能性があります)。zsh
echo
echo
dash
とにかく、echo
任意のデータを出力するために使用したくありません。標準および移植可能なコマンドはですprintf
。
echo
さまざまなラッパー機能を実装する方法を含む詳細については、次の回答で確認できます。printf
なぜprintfがechoより優れているのですか?