![Bash 문제 인용](https://linux55.com/image/141056/Bash%20%EB%AC%B8%EC%A0%9C%20%EC%9D%B8%EC%9A%A9.png)
여기 내 코드가 있습니다.
이 코드를 실행하려는 이유를 설명할 수 있습니다. 나는 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
않고 블록 에 명령을 잘못 채우고 있습니다 .fi
if
test
[
귀하의 코드:
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의 개선 제안에도 불구하고 코드 줄이 의미가 있을 것입니다.