cshスクリプトで「@」文字の意味は何ですか?

cshスクリプトで「@」文字の意味は何ですか?

cshスクリプトをbashに翻訳していますが、次のような行が見つかりました。

@ lines = `grep num_lines ../config.txt | awk '{printf("%d",int($2))}' `

ここで「@」は何をしますか?私は少し見つけました。文書「@」を式として csh を宣言します。しかし、これは私に一般的な変数割り当てのようです。 bashでコードのgrepとawk部分を実行すると、出力は "%d 12045"のように "%d"の前にある整数です。

ベストアンサー1

まあ、このスクリプトを書いた人が何を考えたのかを知ることは不可能です。しかし、以下はいくつかの観察事項です。

  • awkコマンドが表示されると、printf入力行に2番目の文字列の整数値が印刷されます。
  • 〜のようにエマルオコメント私がレビューしたように、 awkそれは非常に強力なプログラムです。grep、または他のものとsed一緒に実行する必要はほとんどありませんawk。だから
    grep num_linesファイル名| awk '{ printf("%d", int($2)) }'
    次のように書くことができます
    awk '/num_lines/ { printf("%d", int($2)) }'ファイル名
  • 上記のようint($2)整数部分 入力行の 2 番目の文字列値です。したがって、プロファイルにとマークされている場合を取得num_lines   fooします0。適切な形式の構成ファイルを使用すると、そのような予防措置を講じる必要はないようです。num_lines   3.143
  • いずれにせよ、
    printf("%d", int($2))
    受け入れられない私が知る限り、
    printf("%d", $2)
    そして
    整数印刷($2)
    (ほぼ)同じです。
  • 私が確認できる1つの違いは、このprintfバージョンは最後に改行文字を書き込まないことです。
    $ echo "num_lines 42" awk '{printf("%d", $2)}'; 日付
    422019年5月13日月曜日午前12:00:00
     
    $ echo "num_lines 42" awk '{print int($2)}';日付
    42
    2019年5月13日月曜日午前12:00:01
    `…`ただし、末尾の改行文字が削除されるため、これは実際には関係ありません。
  • 「これは私に一般的な変数割り当てのように見えます」と言います。しかし、[t]cshユーザーはこれが許可されていないことを知っています。
    変える=
    あなたは言わなければなりません
    置く 変える=
    または
    @ 変える=表現
    もちろん、単純な整数定数も有効です。expr したがって、著者はおそらくより短く、値が整数であることを知っているので、@代わりに使用したでしょう。set

したがって、このステートメントは変数をlinesfromの値に設定します。num_lines../config.txt

おすすめ記事