私のスクリプトでecho
に問題があります。
echo -n "Some string..."
版画
-n Some string...
そして次の行に移動します。コンソールでは、改行なしで正しく動作しています。
Some string...
echo
コマンドには、動作が異なる複数のバージョンがあります。どうやらあなたのスクリプトに使用されているシェルは-n
を認識しないバージョンを使用しています。
printf
コマンドは、より一貫した振る舞いをします。 echo
はecho hello
のような単純なことには問題ありませんが、もっと複雑なことにはprintf
を使うことをお勧めします。
あなたはどんなシステムを使っていますか、そしてあなたのスクリプトはどんなシェルを使っていますか?
bash
name__には、 "echo"という "組み込み"コマンドがあります。
$ type echo
echo is a Shell builtin
さらに、適切な実行可能ファイルである「echo」コマンドがあります(つまり、echo
name__を解釈して実行するのではなく、シェルが/bin/echo
をフォークおよび実行します)。
$ ls -l /bin/echo
-rwxr-xr-x 1 root root 22856 Jul 21 2011 /bin/echo
echo
name__の\c
および-n
に対するWRTの動作はさまざまです。最善の策は、printf
name__を使用することです。これは、私が見た4つの異なる* NIXフレーバーで使用可能です。
$ printf "a line without trailing linefeed"
$ printf "a line with trailing linefeed\n"
で試してみる
echo -e "Some string...\c"
それは期待通りに私のために働きます(あなたの質問から私が理解したように)。
man
ページからこの情報を得たことに注意してください。 man
ページはまた、シェルがそれ自身のバージョンのecho
を持っているかもしれないことに注意しています、そして私はbash
がそれ自身のバージョンを持っているかどうかはわかりません。
"read"のような他のコマンドでifの内側にechoを使用すると、設定を無視し、とにかく新しい行にジャンプします。
あなたが行ってあなたを書くとき、シェルスクリプトは常に#!/ usr/bin/env bashのように最初の行を置きます。このシェルはエスケープシーケンスを省略または操作しません。 ex echo "これは最初の行です"これは最初の行です。
だけでなく最も人気のあるlinuxUbuntu
&bash
:
どのシェルを使用していますか?以下のほとんどがうまくいきます、そうでなければ これを見てください :
echo $0
上記がbash
を表示するならば、以下はうまくいくでしょう:
printf "hello with no new line printed at end"
またはecho -n "hello with no new line printed at end"