Bash "-e"パズル

"-e"フラグと別の変数を別の基本スクリプトに渡してサブルーチンとして呼び出し、奇妙な問題に遭遇したことに基づいてコマンド文字列を作成しようとしています。私はサブルーチンに渡すときに文字列の "-e"部分を失います。私は、問題、任意の助けを説明するカップルの例を作成しますか?

これは期待通りに機能します:

$echo "-e  $HOSTNAME"

-e  ops-wfm

これはしません。私たちは特別な修飾子として解釈されるので "-e"を失います。

$myFlag="-e $HOSTNAME"; echo $myFlag

ops-wfm

"\"エスケープ文字を追加しても動作しません。正しい文字列の前に "\"が付いています。

$myFlag="\-e $HOSTNAME"; echo $myFlag

\-e ops-wfm

-e を飲み込まないようにするにはどうすればよいですか?

4
追加された 編集された
ビュー: 1

2 答え

4
追加された
私は私の答えを更新しました。
追加された 著者 Johnsyweb,
@chesnutpは、実際のコードを見ることができずに、おそらく起こっていることは、引用符がなければ変数は単語分割の対象となるため、プログラムは単語 "-e"と "value"を受け取り、プログラムは単一の単語 "-e value"を受け取りました。
追加された 著者 glenn jackman,
先端のためのthx;私はbashスクリプトでテストしています。{}は関数のために何をしていますか?
追加された 著者 chesnutp,
Johnsyweb、あなたの詳細な返答は、私が解決する必要があった、感謝の念をくれました。エコーアーティファクトは赤い鳴き声であり、実際の問題ではないことが分かります。元の呼び出しでは、 "$ myFlag"を使用していましたが、これはサブ関数にエラーを返すようになりました "オプションには引数-eが必要です"。私は{}形式($ myFlagを$ {myFlag}に変更しました)を使用するように更新し、ビンゴが機能しました。必須のOPTARG要件で最初のフォーマットがエラーを起こす理由を理解していない。ありがとうPC
追加された 著者 chesnutp,

さて、変数を引用符で囲むことができます:

echo "$myFlag"

...あなたの最初の例と同じようにします。これは、あなたが言うように、うまくいきます。

3
追加された