如何在同一行并排打印 echo 命令的输出和函数的输出?

问题描述 投票:0回答:1

我正在尝试使用以下 bash 脚本输出菱形形状。

#!/bin/bash

read -p "Please write a number: " number

# Printing asterisks according to input:
for i in $(seq 1 "$number")
do
        stars+="*"
done

# Another way:
# stars=$(printf "%*s" "$number" "*")

# Function 1
space=$(( number - 1 ))
function pyramid1 {
        for (( i=1; i<=$number; i++ ))
        do
                for (( k=$space; k>=0; k-- ))
                do
                        echo -n " "
                done
                for (( j=1; j<=i; j++ ))
                do
                        echo -n "*"
                done
                space=$(( space - 1 ))
                echo
        done
}
# pyramid1

# output1=$(pyramid1)
# pyramid3=$(echo "$output1" | rev)
# echo "$pyramid3"

function pyramid4 {
for (( i=$number; i>0; i-- ))
do
  echo "$stars"
  until=$(( $i-1 ))
  stars="${stars:0:i-1}"
done
}

output=$(pyramid4)
pyramid2=$(echo "$output" | tac)

output1=$(pyramid1)
pyramid3=$(echo "$output1" | tac)

#pyramid1
#echo "$pyramid2"
#echo "$pyramid3"
#pyramid4


#echo "$pyramid2" > temp2
#echo "$pyramid3" > temp3

printf '%s|%s\n' "$(pyramid1)" "$pyramid2"
printf '%s|%s\n' "$pyramid3" "$(pyramid4)"

作为初学者,我能够创建每 4 个部分。但是,我无法在同一行中并排打印每两个部分。我将衷心感谢您的帮助。先感谢您!这是我最后得到的输出

bash shell printf
1个回答
0
投票

混合使用算术评估(例如,

((a=i<0?-i:i))
表示
i
的绝对值)、模式替换(例如,
"${s:0:b}"
表示“$s”的第一个字符
b
)和
printf的字段宽度规范
(例如,
printf -v s '%*s' $((2*n)) ''
用于在
2*n
中存储
s
空格字符串):

n=5
printf -v s '%*s' $((2*n)) ''
s=${s// /*}
for ((i=-n+1;i<n;i++)); do
  ((a=i<0?-i:i))
  ((b=2*(n-a)-1))
  printf '%*s%s\n' $a "" "${s:0:b}"
done
    *
   ***
  *****
 *******
*********
 *******
  *****
   ***
    *
© www.soinside.com 2019 - 2024. All rights reserved.