echo $'hi\nhi' > /etc/list.list が機能しない

echo $'hi\nhi' > /etc/list.list が機能しない

echo $’hi\nhi’ > /etc/list.listKali Linux 2020.4 Live USBで複数のコマンドを含む実行可能なスクリプトテキストファイルを生成する場合:

  1. $ファイルテキストに含まれ、’’2つのシンボルが消えます。

  2. hi2を互いに分離する新しい線を作成する方法はなく、\n分離はまったく表示されません。

ただし、実行可能ファイルの外部または通常の端末で同じコマンドを使用すると機能します。

Kali 2020.4は2020.3で変更され、完全に機能するため、実行可能なテキストファイルでエコーフォーマットを使用できませんか?echo1行のコマンド内で新しい行を作成するために使用できる他のコマンドはありますか?

ベストアンサー1

コマンドにはいくつかの問題があります。幸い、すべて簡単に解決できます。

  1. 〜のようにクワジモド文字列を区別するのに有効な文字ではないことがコメントに記載されています。ボンアイデンティティシェル(Kali Linuxのデフォルトのシェルインタプリタである「BASH」とも呼ばれます)一重引用符(')または二重引用符()に置き換える必要があります。"ここに良い情報がありますBASHで参照

  2. 「を使用しようとしています。エスケープシーケンス「あなたのecho命令にはありますが、-e旗はありません。

  3. あなたの事実に基づいていいえ$ドル記号文字()を出力に含めたい場合は、「実行したいようです。パラメータ拡張「または(例:スチールドライバーコメントから)は[ANSI引用符付き文字列](https://www.gnu.org/software/bash/manual/html_node/ANSI_002dC-Quoting.html)。

ANSIが引用したGNU BASH文書によると:

$ 'string'形式の単語は特別に扱われます。ワードは、ANSI C規格で指定されているように置き換えられたバックスラッシュエスケープ文字を使用して文字列に展開されます。バックスラッシュエスケープシーケンス(存在する場合)がデコードされます。

この答えでは、エスケープシーケンスを理解することが重要な違いです。シェル拡張が発生する場所を選択できます。実行ステップecho またはANSI引用符を使用するとき。場合によっては、echo目的の効果を得るためにこのタイプの拡張を指定する操作を外部で実行する必要があるため、この区別が行われます。より深く考えた後、awkこの問題を見たツールが思い出されました。

フィールドを区切るためにバックスラッシュまたは一重引用符を使用する

一般的に言うと」ニュービートラップ - 変数BASH Hackers wikiセクション、特に「変数の設定」および「変数の拡張(使用)」のサブセクションを参照してください。

これはBASH自体の基本的な構文の問題であり、マイナーなKaliバージョンの更新の影響を受けません。

編集:含める3a / 3bの分類を追加しました。スチールドライバーのコメント。

おすすめ記事