Bash 기반 블랙박스 CLI를 사용하고 있지만 무엇을 사용할 수 있는지 완전히 모르겠습니다. 중괄호 확장은 작동하지 않으며 인수를 명시적으로 나열하지 않고 반복할 수 있는 기능이 있는데, 이는 처음에 루프에서 피하려고 했던 것입니다.
for x in {1..5}
do
for y in {a..c}
do
echo $HOME$x$y
done
done
중괄호 확장 없이 매개변수를 명시적으로 나열하지 않고 어떻게 이와 같은 작업을 실행할 수 있습니까? 환경 변수도 작동해야 하므로 $HOME
예제에 임의 변수를 추가했습니다.
무엇이 작동하고 무엇이 작동하지 않는지 완전히 확신할 수 없으므로 다른 대안(AWK, sed)을 자유롭게 제안해 주십시오.
답변1
jot
의견에 따라 사용하는 것이 좋습니다 . 다음은 (그리 예쁘지는 않은) awk
구현입니다.
#!/usr/bin/awk -f
BEGIN{
for(i=1;i<5;i++)
for(j=97;j<100;j++)
printf "%s%d%c ",ENVIRON["HOME"],i,j;
print;
}
-v
또는 ( 옵션을 사용하여 쉘 변수를 변수에 할당 할 수도 있습니다 )awk
awk
#!/bin/bash
awk -f /dev/fd/3 3<< EOF
BEGIN{
for(i=1;i<5;i++)
for(j=97;j<100;j++)
printf "$HOME%d%c ",i,j;
print;
}
EOF
답변2
실행 중이라고 확신하는 경우 bash
중괄호 확장이 활성화되지 않았을 수 있습니다.
이용해서 확인해보세요
echo $-
himBHs
제가 사용하고 있는 셸에서는 B
이 옵션이 중괄호 확장을 활성화하도록 설정되어 있습니다.
다음 명령 중 하나를 사용하여 가새 확장을 설정할 수 있습니다.
set -o braceexpand
set -B
이 경우 문자나 숫자를 반복할 필요가 없습니다.
echo {1..5}{a..c}
1a 1b 1c 2a 2b 2c 3a 3b 3c 4a 4b 4c 5a 5b 5c
또는 다음을 사용하여 비활성화하십시오.
set +o braceexpand
set +B
~로 이어지다
echo {1..5}{a..c}
{1..5}{a..c}