次のスクリプトを完了しました。
#! /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
シェル変数の文字数を数える必要はありません。シェルでもこれを行うことができ、起動するために別々のプロセスを実行する必要はありません。
たとえば、
そしてwc
:
_path=/some/place/in/my/filesystem
printf %s "$_path" | wc -c
###OUTPUT###
28
いいえwc
:
printf %s "${#_path}"
###OUTPUT###
28
2つの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
代わりにそれを使用できますが、size=$(echo -n $path | wc -c)
非標準性に関する警告に注意してください-n
。
1. -n
GNU coreutilのecho実装は非標準なのでYMMVです。幸い、ここでは実際に使用する必要はありません。
答え3
オプション-n
はecho
改行を抑制します。したがって、次のようにすることができます。
echo -n "echec avec le nom $path qui fait"
echo -n $(echo $path|wc -c)
echo "caracteres"