ここには何が起こっていますか?なぜBourneシェルは%s引数に対してprintfを反復処理しますか?
printf.sh:
#! /bin/sh
NAME="George W. Bush"
printf "Hello, %s\n" $NAME
コマンドラインセッション:
$ ./printf.sh
Hello, George
Hello, W.
Hello, Bush
UPDATE:printf "Hello, %s\n" "$NAME"
作品。私はecho
を使用していない理由について、検討し
echo.sh:
#! /bin/sh
FILE="C:\tmp"
echo "Filename: $FILE"
コマンドライン:
$ ./echo.sh
Filename: C: mp
POSIX spec for echo
は、「新しいアプリケーションは、代わりにprintf
を使用することが推奨されている、と言いますecho
"(これと他の理由で)。あなたがそれらの単語のすべてが自分でプリントアウトしたい場合は
bash組み込みエコーはデフォルトでは\ replacementにはなりませんが、POSIXシェル(たとえばダッシュなど)は、その仕様へのリンクが示すようにエコーします。とにかくシェルを使用しているので、単に "Hello、$ NAME \ n"という文字をプリントすることができます。 –
実際、%sを使用するのはセキュリティと正確性の理由から、おそらく良い習慣です。 printfは\ replacementやその他のものをフォーマット文字列に渡しますので、可能な限り変数を外してください。 –