이것은 평가나 성적이 없는 주간 연습입니다(답도 얻지 못했습니다!).
누군가 나에게 이 연습을 설명할 시간이 있다면 정말 감사하겠습니다. 저는 주말에 이 연습을 완료하려고 노력하고 있으며 다음 주까지 교사의 도움을 받을 수 없기 때문입니다. 나는 bash 프로그래밍, 정규 표현식 및 grep에 대해 많은 책을 읽고 작업했습니다. 그러나 아래 코드는 나를 혼란스럽게 합니다.
지침이 불완전하거나 이해가 안 되는 것인지 궁금합니다.
특히 다음 사항으로 인해 전체 내용을 이해하지 못합니다.
NAMES=`ls *.$1`
filed=$(file:$1).$2
연습 4.3
다음 내용이 포함된 텍스트 파일(myfile이라고 함)이 주어졌다고 가정합니다.
#!/bin/bash
NAMES=`ls *.$1`
for file in $NAMES; do
filed=$(file%:$1).$2
mv file filed
done
다음 명령을 실행합니다. $ grep ' file ' myfile
$ grep 'file*' myfile
$ grep '^ *file*' myfile
$ grep 'file$' myfile
$ sed 's/ file* / script /g' myfile
$ sed ' /for/,/files/d' myfile
$ sed '/\$[A-Z]..[A-Z]*/d' myfile
그런 다음 출력이나 결과를 해석합니다.
답변1
NAMES=`ls *.$1`
이것은 작업입니다. 변수에 $NAMES
값이 할당됩니다. 값은 백틱으로 표시된 명령의 출력으로 처리됩니다( 의 명령 대체 참조 man bash
). $1
스크립트의 첫 번째 매개변수에 해당하는 특수 매개변수입니다. 따라서 확장명을 인수(예: ./script.sh txt
) 로 사용하여 스크립트를 실행해야 하며 ls
명령의 출력이 변수에 저장되는 것으로 보입니다.
filed=$(file%:$1).$2
정말 이상해요. 사실, 괄호가 중괄호가 아닌 것이 확실합니까? 그리고 .
대신 에 가 있어야 합니다 :
.
filed=${file%.$1}.$2
${var%pattern}
변수 끝에서 패턴을 잘라냅니다. man bash
자세한 내용은 매개변수 확장을 참조하세요. 따라서 이 경우에는 점과 첫 번째 인수에 의해 제공된 확장자를 제거하고 점과 두 번째 인수를 추가합니다.
그런데, 움직이는 라인은 아마도
mv $file $filed
그렇지 않으면 루프를 사용할 이유가 없습니다.