![for 루프에 괄호를 추가할 수 없는 이유는 무엇입니까?](https://linux55.com/image/119191/for%20%EB%A3%A8%ED%94%84%EC%97%90%20%EA%B4%84%ED%98%B8%EB%A5%BC%20%EC%B6%94%EA%B0%80%ED%95%A0%20%EC%88%98%20%EC%97%86%EB%8A%94%20%EC%9D%B4%EC%9C%A0%EB%8A%94%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
내 코드는 다음과 같습니다
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)
.
$()
명령 대체 구문이며 ()
서브쉘을 도입합니다.