変数が二重引用符で囲まれていても、空白として表示されます。

変数が二重引用符で囲まれていても、空白として表示されます。

簡単な質問がありますが、私は直接答えることはできません。以下に結果を印刷した後に空白として表示される変数があります。

スクリプト:

core_out=find coretst.*
echo "$core_out"
Result: No display *blank*
#tried to echo without double quotes as well but it has the same result

ところで、私はパテを使用しています。

実際の目標: 1. /opt/datintdv/Informatica/9.6.1/server/bin --dir1 で core.* を確認します。 - core.*が存在し、1より大きい場合は、1つのcore.*を取得してから文字列を実行します(core. . *)| grep "pmdtm(" --script1 script1 が機能しない場合は、実行可能ファイル (コアファイル名) 引数に出力を保存します。 フルコアまで。実行後、出力は変数に保存されます。 - dir1にcore.*がない場合は、/opt/datintdv/Informatica/9.6.1/tomcat/binを確認してください。 core.* が存在し、1 より大きい場合は、1 つの core.* を取得し、文字列 (core.*) を実行します。 )| grep "pmdtm(" --script1 script1 が機能しない場合は、実行可能ファイル (コアファイル名) の引数に出力を保存します。 フルコアまで。実行後、出力は変数に保存されます。 *改行文字で区切られた出力

  1. すべての出力を取得し、電子メール本文に接続します。
  2. 電子メールでユーザーに送信します。 *現在スクリプトを作成していますが、初めてだと難しいですね。

あなたが私を助けることができることを願っています!ありがとうございます!

ベストアンサー1

コマンドの結果をインラインで使用することを意味するコマンドの置き換えは、を通じて行われます$( ... )

あなたに関する限り、

core_out=$( find coretst.* )

ただし、これを行うと、で始まるすべてのパスが展開されているすべてのパスfindで始まるすべてのパスを見つけるように求められます。coretst.*私はあなたがしたいことが現在のディレクトリまたはその下のディレクトリを探していると仮定します。文書パターンを一致させますcoretst.*。あなたはこれを行います

core_out=$( find . -type f -name 'coretst.*' )

パターンを引用すると、coretst.*シェルがパターンを現在のディレクトリの名前に拡張するのを防ぎます。

それで問題は、これが返したパス名で何をしたいのかということです。単に印刷したい場合は、変数はまったく必要ありません。

find . -type f -name 'coretst.*'

やる意思があれば削除するファイルがある場合は、次の作業を行う必要がありますfind

find . -type f -name 'coretst.*' -exec rm {} +

ファイルの他の操作も内で実行できますfind

質問参照」検索結果を繰り返すのはなぜ悪い習慣ですか?find返されたパスを使用するのが悪い習慣である可能性がある理由(答えはループの結果に関するものですfind


コメントから:

現在のフォルダから検索したいのですが、その出力は部分文字列のものなので、これに使用されます。strings ($core_out) | grep "pmdtm("

私が正しく理解した場合、これは次のように機能します。

find . -type f -name 'coretst.*' -exec strings {} + | grep -F 'pmdtm('

つまり、strings見つかったすべてのファイルを実行し、文字列を含む行を見つけますpmdtm(

どのファイルで一致が見つかったかを知りたい場合は、次の手順を実行します。

find . -type f -name 'coretst.*' -exec sh -c '
    for name; do
        if strings "$name" | grep -qF "pmdtm("; then
            printf "%s\n" "$name"
        fi
    done' find-sh {} +

おすすめ記事