echo "test" > work.txt
printf "test" > work.txt
上記2つは同じ動作をするので、大きく違いはないし
変数+文字列の出力をprintfで行うことが多いが、
echoでも実現可能であるから、好みで使えば良いと思う。
ただ1点、改行に関してechoは注意が必要。
例えば FreeBSD・Linux 系は改行のオプションが -n 、
Solaris など SystemV 系は \c 、
bash は -n 、
tcsh はデフォルトでは -n だがシェル変数 echo_style で変更可能。
改行について悩みたくない場合は、echo コマンドではなく printf コマンドを使うこと。
echo と異なり、改行させたい場合 \n を付ける事。
% printf "abc"; printf "def"
abcdef
文字列を表示するには %s を使う
% printf "HOME=[%s]\n" $HOME
複数のフォーマットも指定できる
% printf "HOME=[%s] USER=[%s]\n" $HOME $USER
数値は %d を使う
% printf "[%d]\n" 30
[30]
5桁で右詰め
% printf "[%5d]\n" 30
[ 30]
5桁で左詰め
% printf "[%-5d]\n" 30
[30 ]
5桁でゼロパディング
% printf "[%05d]\n" 30
[00030]
printf "test" > work.txt
上記2つは同じ動作をするので、大きく違いはないし
変数+文字列の出力をprintfで行うことが多いが、
echoでも実現可能であるから、好みで使えば良いと思う。
ただ1点、改行に関してechoは注意が必要。
例えば FreeBSD・Linux 系は改行のオプションが -n 、
Solaris など SystemV 系は \c 、
bash は -n 、
tcsh はデフォルトでは -n だがシェル変数 echo_style で変更可能。
改行について悩みたくない場合は、echo コマンドではなく printf コマンドを使うこと。
echo と異なり、改行させたい場合 \n を付ける事。
% printf "abc"; printf "def"
abcdef
文字列を表示するには %s を使う
% printf "HOME=[%s]\n" $HOME
複数のフォーマットも指定できる
% printf "HOME=[%s] USER=[%s]\n" $HOME $USER
数値は %d を使う
% printf "[%d]\n" 30
[30]
5桁で右詰め
% printf "[%5d]\n" 30
[ 30]
5桁で左詰め
% printf "[%-5d]\n" 30
[30 ]
5桁でゼロパディング
% printf "[%05d]\n" 30
[00030]