我想將整數作為命令列引數放入 shell 腳本中,并使用這些整數進行基本的字串操作。
例如:
# POSIX Shell
user@host $ ./script 3 4 1 5
^
| * * *
| * * * *
| *
| * * * * *
------------
user@host $
還有一些偽代碼來演示,我想如何實作這一點:
# Pseudocode
#!/bin/sh
for arg in $#; do
echo $((arg * '* '))
done
# Or something similar with a loop ;-)
如果有人有一個想法可以引導我在像 /bin/sh 這樣的純 POSIX Shell 中朝著正確的方向前進,那就太好了!
uj5u.com熱心網友回復:
有很多方法可以給這只貓剝皮。這是一個:
#!/bin/bash
array=( "$@" )
function repeat() { num="${2:-100}"; printf -- "$1%.0s" $(seq 1 $num); printf '\n'; }
arraylength=${#array[@]}
for (( i=0; i<${arraylength}; i ));
do
if [[ ${array[$i]} -ge $max ]]; then
max=${array[$i]}
fi
printf '%s' '| '
repeat '* ' ${array[$i]}
done
repeat '-' $(( $max $max 3 ))
或者這樣做awk:
echo "3 4 1 5" | awk 'function a(b,c){r="";while(c-->0)r=r b;print r}{for(i=1;i<=NF; i){printf "| ";a("* ",$i);if(m<$i)m=$i}}END{a("-",(m*2) 3)}'
uj5u.com熱心網友回復:
我相信這是您正在尋找的關鍵,并且也應該嚴格遵守 POSIXly:
#! /bin/sh
for n; do
printf '| ';
i=0;
while [ $i -lt $n ]; do
printf '* ';
i=$(( i 1 ));
done
printf '\n';
done
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/376535.html
下一篇:將字串轉換為IP范圍陣列
