2017-02-24 10 views
1

私はプログラムシェル(#!/ bin/sh)を作っています。問題はprintfが文字列paramの最初の単語を表示することです。シェルのprintfは最初の単語だけを表示します

これはあなたのために簡素化するためのコードの抜粋です:

#!/bin/sh 

test="Good morning" 
printf "\n" 
printf $test 
printf "\n" 

このコードは、単にGoodを出力します。

+1

ここで 'printf'を使用する理由は何ですか? – user1934428

答えて

3

ダブル引用符

printf "$test" 

また、シェルによって単語分割避けるためにあなたの変数は、Cようprintfの一般的な構文は、テキスト形式で与えられ

printf <FORMAT> <ARGUMENTS...> 

を持っているだろう<FORMAT>であり、書式文字列が指し示す可能性のあるすべての引数は、その後、<ARGUMENTS…>で示されます。

表示されている問題は、引用符で囲まれていない変数bashが単語分割を呼び出すためです。これは、変数が空白(または特殊変数$IFSが設定されているもの)で分割され、結果として得られる各単語がグロブとして使用されることを意味します(一致するファイル名に一致するように展開されます)。あなたの問題は、分裂する部分のためです。

1

修正。最初の引数だけが書式文字列であり、その他は書式設定される追加の引数です。 Just like in C.

printf '\n' 
printf '%s' "$test" 
printf '\n' 
関連する問題