如何内联 shell 替换其他格式选项(如剪切和管道)

How to do inline shell replace alongside other formatting options like cut and pipe

我正在尝试执行以下操作:

从一个包含 space 分隔参数列表的变量开始 - $cmd_str(包含大约 6 个参数),假设它看起来像:

cmd p1 p2 p3 p4 p5 p6

我的目标是尝试打印它们:

Params:
   1 - p1
   2 - p2
   etc...

所以首先我必须切断 "cmd" 字符串,然后我打算用“\n\t[n] - ”替换 spaces,其中 n 是数

到目前为止我有:

echo $cmd_str | cut -c5-

然后我想添加字符串替换,但无法实现

echo ${$cmd_str | cut -c5-// /"\n\tnum - "}

然后我将不得不用循环中的数字替换每次出现的 "num"...但我还没有做到那一步! - 这样做可能是一种迟钝的方式?

使用 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, }' <<< "$cmd_str"
1 - p1
2 - p2
3 - p3
4 - p4
5 - p5
6 - p6

如果 cmd 是您的脚本,请使用扩展位置参数的特殊参数 @

例如:

let i=0
echo "Params:"
for p in "${@}"; do
    let i+=1
    printf "\t${i} - %s\n" $p
done