4006에서 7075까지의 파일 이름을 가진 69개의 파일을 만들고 싶습니다. 각 파일에는 열거형 콘텐츠가 있어야 합니다. 다음 코드는 개별 파일에 삽입하려는 내용을 셸에 인쇄합니다. 그런데 어떻게 해야 합니까?
#!/bin/bash
for i in `seq 4006 4075`; do
echo "vid $i\nports 524288\nactive = 1 >vlan_$i.ini"
done
따옴표 사이의 부분을 `(백틱)에 넣으려고 했지만 빈 파일만 표시됩니다.
답변1
echo
명령의 출력을 리디렉션하려면 리디렉션 연산자를 >
따옴표 밖에 두어야 합니다. 큰따옴표 사이의 문자는 >
자신을 나타냅니다.
기본적으로 bash에서는 echo
백슬래시 시퀀스가 확장되지 않습니다. -e
옵션을 에 전달하거나 echo
, xpg_echo
쉘 옵션을 설정하는 데 사용하거나 shopt
, printf
대신 사용해야 합니다 echo
.
for i in `seq 4006 4075`; do
printf "vid %s\nports %d\nactive = 1\n" "$i" 524288 1 >"vlan_$i.ini"
done
ㅏ여기 문서여러 줄 문자열을 나타내는 더 읽기 쉬운 방법입니다. 명령줄 인수가 아닌 입력으로 전달되므로 cat
대신 을 사용하십시오 echo
. 텍스트가 들여쓰기되면 들여쓰기가 복사됩니다( <<-EOF
들여쓰기를 피하기 위해 대신 사용할 수 있지만 <<EOF
공백 대신 탭 들여쓰기만 가능).
for i in `seq 4006 4075`; do
cat <<EOF >"vlan_$i.ini"
vid $i
ports 524288
active = 1
EOF
done