-1

这是我的脚本。它只需要 4 个位置参数。输出应该是所有位置参数、每个参数的字符数以及每个参数的第一个字符。

#!/bin/bash
rm -r param.out
declare -i cont
cont=$#
if [ $cont -eq 4 ]
then
  echo "Positional parameters" >> param.out
  echo $* >> param.out
  echo "Number of characters of each positional parameter" >> param.out
  echo -n $1 | wc -c >> param.out
  echo -n $2 | wc -c >> param.out
  echo -n $3 | wc -c >> param.out
  echo -n $4 | wc -c >> param.out
  echo "First character of each parameter" >> param.out
  echo $1 | head -c 1 >> param.out
  echo $2 | head -c 1 >> param.out
  echo $3 | head -c 1 >> param.out
  echo $4 | head -c 1 >> param.out
else
   echo "Error"
  exit
fi

输入./file 12 23 34 456得到的文件如下:

Positional parameters

    12 23 34 456

Number of characters of each positional parameter

    2
    2
    2
    3

First character of each parameter

    1234

理想的情况是获得第一个输出(12 23 34 456)

PD。我知道这可以使用for/while来避免重复 echo 但我正在学习 bash :/

4

1 回答 1

0

echo -n $1 | wc -c >> param.out

wc将新行附加到它的输出中,必须将其删除或替换为空格才能获取单行上每个参数的字符数。你可以这样做sed

echo -n $1 | wc -c | sed 's/\n/ /' >> param.out

echo $1 | head -c 1 >> param.out

用于echo将空格附加到参数的第一个字符:

echo "$(echo $1 | head -c 1) " >> param.out
于 2017-11-15T16:44:23.187 回答