我正在尝试执行以下操作:
从包含空格分隔的参数列表的变量开始 - $ cmd_str(包含大约6个参数),让我们说它看起来像:
cmd p1 p2 p3 p4 p5 p6
我的目标是尝试打印它们:
Params:
1 - p1
2 - p2
etc...
所以第一个我必须切断" cmd"字符串然后我打算用" \ n \ t [n] - "替换空格,其中n是数字
到目前为止,我有:
echo $cmd_str | cut -c5-
然后我想添加字符串替换,但无法使其工作
echo ${$cmd_str | cut -c5-// /"\n\tnum - "}
然后我将不得不更换" num"循环中的数字...但我没有那么远! - 这可能是一种迟钝的方式吗?
答案 0 :(得分:2)
使用BASH数组:
cmd_str="cmd p1 p2 p3 p4 p5 p6"
arr=($cmd_str)
for ((i=1; i<${#arr[@]}; i++)); do printf "%d - %s\n" $i "${arr[$i]}"; done
1 - p1
2 - p2
3 - p3
4 - p4
5 - p5
6 - p6
或使用awk
:
awk -v RS=' ' 'NR>1{printf "%d - %s\n", NR-1, $1}' <<< "$cmd_str"
1 - p1
2 - p2
3 - p3
4 - p4
5 - p5
6 - p6
答案 1 :(得分:2)
如果您的脚本是cmd
,请使用扩展位置参数的特殊参数@
。
例如:
let i=0
echo "Params:"
for p in "${@}"; do
let i+=1
printf "\t${i} - %s\n" $p
done