for 루프에 괄호를 추가할 수 없는 이유는 무엇입니까?

for 루프에 괄호를 추가할 수 없는 이유는 무엇입니까?

내 코드는 다음과 같습니다

dnafile=$1

for seq in (fold -w3 $dnafile | uniq); do
              fold -w3 $dnafile | grep $seq | wc -l
              echo $seq
              echo '(new line)'
done

오류가 발생합니다.

syntax error near unexpected token `('

답변1

생성된 고유 행 수를 계산하려는 것 같습니다 fold -w3 $dnafile. 이 작업은 루프 없이 수행할 수 있습니다.

fold -w3 "$dnafile" | sort | uniq -c

출력 sort라인이 정렬 fold되고 uniq -c각 라인의 연속 발생 횟수가 계산됩니다.

출력은 결과의 각 고유 행에 대해 한 줄로 표시되며 fold앞에 숫자가 붙습니다.


구문 오류는 명령 대체(즉, 명령의 출력으로 대체된 구성)가 다음과 같아야 한다는 사실에서 발생합니다 $( ... ). 누락된 내용을 삽입한다고 해서 실제로 코드가 작동하는지 확신할 수 없습니다 $. 왜냐하면 쉘이 여전히 결과 텍스트를 줄 바꿈과 공백으로 분할하기 때문입니다. 그러나 입력 데이터가 어떻게 생겼는지 모르기 때문에 추측하기는 어렵습니다.

(...)for 루프의 이 위치에는 하위 쉘이 허용되지 않습니다.

답변2

당신은 $잃습니다 (fold -w3 $dnafile | uniq). 이 시도: $(fold -w3 $dnafile | uniq).

$()명령 대체 구문이며 ()서브쉘을 도입합니다.

관련 정보