如何进行内联shell替换以及其他格式化选项,如剪切和管道

时间:2015-02-02 18:00:56

标签: linux string bash

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

从包含空格分隔的参数列表的变量开始 - $ 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"循环中的数字...但我没有那么远! - 这可能是一种迟钝的方式吗?

2 个答案:

答案 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