사용자에게 메시지를 입력하도록 요청한 다음 원하는 만큼 메시지를 표시하는 스크립트를 만들고 있습니다.
이것이 내가 지금까지 가지고 있는 것입니다.
message.sh
#!/bin/bash
echo -en "Enter a message to display: "
read -r MESSAGE
echo -en "How many times would like to repeat it? "
read -r REPEAT
for i in {1.."${REPEAT}"}; do
echo "${MESSAGE}"
done
실제 출력
예를 들어 내가 입력하면안녕하세요메시지 및5반복 횟수에 대해서만 표시됩니다.안녕하세요한번만.
예상 출력
Hello
Hello
Hello
Hello
Hello
사용자의 입력에 따라 어떻게 반복할 수 있나요?
답변1
우선순위의 문제입니다. 지원 확장 평가앞으로변수는 다음과 같습니다.
$ foo="10"
$ echo {1.."$foo"}
{1..10}
또는 더 자세히 설명하면 다음과 같습니다.
$ set -x
$ echo {1.."$foo"}
+ echo '{1..10}'
{1..10}
이에 대한 문서는 다음과 같습니다 man bash
.
확장 순서는 중괄호 확장, 매개변수 및 변수 확장, 산술 확장, 명령 대체(왼쪽에서 오른쪽으로 수행됨)입니다.
즉, use 를 사용하려고 할 때 {1..$foo}
bash가 가장 먼저 하는 일은 중괄호 확장을 평가하는 것입니다. 이 시점에서 변수는 해당 값으로 대체되지 않았으며 단지 입니다 $foo
. 따라서 bash가 보는 것은 다음과 같습니다 {1..SOMESTRING}
:
$ echo {1..SOMESTRING}
{1..SOMESTRING}
이는 셸이 특정 작업을 수행하는 순서에 따른 문제이므로 해결 방법이 없습니다. 중괄호 확장에서는 이런 방식으로 변수를 사용할 수 없습니다. 다른 방법을 찾아야 합니다. 예를 들어 다음을 사용합니다 seq
.
for i in $(seq 1 "$REPEAT"); do
echo "${MESSAGE}"
done
또는:
for((i=0;i<=$REPEAT;i++)); do
echo "${MESSAGE}"
done