如何不在 shell 脚本中使用 echo(和 wc)打印新行?

如何不在 shell 脚本中使用 echo(和 wc)打印新行?

我已经完成了这个脚本:

#! /bin/sh  
path="foo" 
while touch $path ; do 
    path=./${path} 
done 

echo "echec avec le nom $path qui fait" 
echo $path|wc -c 
echo "caracteres"

如何在同一行打印 3 条回显线?

答案1

echo如果你根本不用的话会好得多。echo与任意输入结合使用可能会产生意想不到的效果。更重要的是,您不需要wc计算 shell 变量中的字符 - shell 也可以做到这一点,并且无需执行单独的进程来启动。

例如:

wc

_path=/some/place/in/my/filesystem
printf %s "$_path" | wc -c

###OUTPUT###
28

wc

printf %s "${#_path}"

###OUTPUT###
28

两个printf论点:

printf 'Arg char count:\t%s\nArg contents:\t%s\n' \                                                                    
    "${#_path}" "$_path"

###OUTPUT###
Arg char count: 28
Arg contents:   /some/place/in/my/filesystem

你的命令:

printf 'echec avec le nom %s qui fait %s caracteres\n' \
    "$_path" "${#_path}"

###OUTPUT###
echec avec le nom /some/place/in/my/filesystem qui fait 28 caracteres

为什么 printf 比 echo 更好?和规格POSIX 参数扩展了解更多信息。

答案2

echo要在 Linux 系统1上使用抑制换行符,请使用-n

echo -n "echec avec le nom $path qui fait"

但是,wc还会打印换行符,并且无法抑制该换行符,但可以将其丢弃:

size=$(echo $path | wc -c);
echo "echec avec le nom $path qui fait $((size-1)) caracteres"

我在这里使用是$((size-1))因为wc将通过 echo 计算换行符输出。您可以改为使用size=$(echo -n $path | wc -c),但要注意关于 的非标准性的警告-n


1. -nGNU coreutil的echo实现是非标准的,所以YMMV。幸运的是,您实际上并不需要在这里使用它。

答案3

选项-nwithecho抑制换行符。所以,你可以这样做:

echo -n "echec avec le nom $path qui fait" 
echo -n $(echo $path|wc -c)
echo "caracteres"

相关内容