Bash問題の引用

Bash問題の引用

ここに私のコードがあります。

このコードを実行する理由を説明できます。私は1つのファイルを取得しようとし、ラインを取得し、ライン1に「があるかどうかを推測します。「なら、2番目のファイルに切り替えてライン1に」そうでない場合は、file2 / line1のデータを保持して最終ファイルに移動します。

しかし、私の質問はエスケープされた引用符をどのように処理しますか?

#! /bin/bash
compteur="1"
ligne="2"
rm testfinal 2>/dev/null
touch testfinal 2>/dev/null
#########BOUCLE PERMUTATION LIGNE

while (( $ligne < "32" ))
do
        if [ 'cat test$compteur | sed -n $ligne\p | awk -F" "'{print $2}' ' == "*" ]
        then compteur=$((compteur+1));
        else
                   cat test$compteur | sed -n $ligne\p >> testfinal
                   ligne=$((ligne+1));
                   compteur=$((compteur=1));
fi
done

編集:私は彼の答えを見つけました:if [ " sed -n $ligne\p test$compteur | awk -F" " '{print $2}'" == "*" ]

ベストアンサー1

あなたのサンプルコマンドは意味がありません。あなたはあなたのものを持っていない、または作業せずにthenブロックにコマンドを誤って埋めています。fiiftest[

あなたのコード:

if [ 'cat test$compteur | sed -n $ligne\p | awk -F" " '{print $2}' ' == "*" ]

それそうだそのコマンドチェーンの出力を比較したい場合など、出力がリテラルの場合は*未決定の操作を実行しますか?もしそうなら、

if [[ "$( cat test$computer | sed -n $ligne\p | awk -F' ' '{print $2}')" == "*" ]]; then
    do_something
fi

ただし、これは特に「無駄な使用」を排除することによってわずかに最適化される可能性がありますcat

if [[ "$( sed -n $ligne\p test$computer | awk -F' ' '{print $2}')" == "*" ]]; then
    do_something
fi

sedコマンドで何をしているのかわかりませんが、linge印刷したい行番号を含む変数であると仮定すると、次のようにすることもできますawk

if [[ "$( awk -F' ' -v ln=$linge 'NR==ln { print $2 }' )" == "*" test$computer ]]; then
    do_something
fi

回答に提出したスクリプト全体に基づいて、次の変更やその他のマイナーな修正を適用して書き直しました。

#!/bin/bash
compteur="1"
ligne="2"
> testfinal # clears contents of file in one step rather than rm; touch
#########BOUCLE PERMUTATION LIGNE

while [[ "$ligne" -lt 32 ]]; do
    if [[ "$( awk -F' ' -v ln=$ligne 'NR==ln { print $2 }' test$computer )" == "*" ]]; then
        compteur=$((compteur+1));
    else
        awk -v ln=$ligne 'NR==ln' >> testfinal
        ligne=$((ligne+1))
        compteur=$((compteur+1)); # I presume that the original 'compteur=1' was a typo.
    fi
done

おすすめ記事