for 루프가 있는 경우 두 개의 탭 공간을 사용하여 결과를 표시하는 방법

for 루프가 있는 경우 두 개의 탭 공간을 사용하여 결과를 표시하는 방법

다음 결과를 얻기 위한 코드를 만들고 싶습니다.

echo -e "\t\tPlease enter your name?"
read name
name="${name,,}"
for i in $(echo "Hello " $name) ; do
    echo ${i^} 
done | sed 's/^/\t\t/;s/$/, here is your order:/'

다음과 같은 이름을 입력하면:mike denver

출력은 다음과 같습니다

<here come out the right space of two tabs>Hello, here is your order:
<here come out the right space of two tabs>Mike, here is your order:
<here come out the right space of two tabs>Denver, here is your order:

기본적으로는 내가 배치한 탭 수( )를 기준으로 왼쪽에서 오른쪽 공백을 생성하지만 \t, Hello입력한 이름마다 플러스 라인을 반복해서 인쇄합니다. sed 명령을 외부에 넣는 방법을 이해하지 못합니다. 내 예상 결과는 다음과 같습니다.

<here come out the right space of two tabs>Hello, Mike Denver here is your order: 

답변1

for이는 루프를 사용하는 것보다 훨씬 쉽습니다.

echo -e "\t\tPlease enter your name?"
read -a name
name="${name}"
echo -e "\t\tHello ${name[@]^}, here is your order:"

산출:

            Please enter your name?
mike denver
            Hello Mike Denver, here is your order:

매개변수 주위의 큰따옴표는 echo변수를 확장하고 모든 것을 원하는 형식으로 한 번에 인쇄합니다.

답변2

배열을 이름으로 사용할 수 있으며 다음과 printf같습니다.

read -p $'\t\tPlease enter your name?\n' -a name
name=( "${name[@],,}" )
printf '\t\tHello %s, here is your order:\n' "${name[*]^}"

관련 정보