Bash 문제 인용

Bash 문제 인용

여기 내 코드가 있습니다.

이 코드를 실행하려는 이유를 설명할 수 있습니다. 나는 1개의 파일을 얻으려고 하고, 라인을 얻고, 라인 1에 "가 있는지 추측합니다."이면 두 번째 파일로 전환하여 라인 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

답변2

'작은따옴표 와 백틱 "``"을 혼동하고 있는 것이 가능합니까 ? 백틱(새로운 백틱과 동일하고 더 이상 사용되지 않는 "명령 대체" $(...))을 사용하면 GopeGhoti의 개선 제안에도 불구하고 코드 줄이 의미가 있을 것입니다.

관련 정보