牛、豚、鶏、どれか一つ食べられなくなるとしたら?

以下のシェルスクリプトで
string="a"
echo $(printf "%.s$string" $(seq 1 10))
%とsの間のドットはどのような意味ですか?

%s "$string"
%.s "$string"
%s $string
"%s$string"
など色々ためしましたが
文字列の出力の時に””を使用したりしなかったりと""と.との関連性もいまいちよくわかりません。

初歩的な質問でしょうがよろしくお願いします

A 回答 (2件)

linux のコマンドで困ったら、まずは man コマンドでマニュアルを読んでみましょう。


http://linuxjm.osdn.jp/html/GNU_coreutils/man1/p …
> および、diouxXfeEgGcs のいずれかで終わる C 書式指定全て

ということで、C言語の printfのマニュアルも見てみます。

https://linuxjm.osdn.jp/html/LDP_man-pages/man3/ …
> フォーマット文字列のフォーマット
> % と変換指定子の間には、0 個以上の フラグ 、 最小 フィールド幅 、 精度 、 長さ修飾子 を (この順序で) 置くことができる。

> 精度
> オプションである精度は、ピリオド ('.') とそれに続く10進数という 形式で指定する
> s と S 変換では、文字列から出力される最大文字数を指定する。

ただ、質問にあるものでは、 . の後が 0 なので、何も表示されない、ということになります。



> 文字列の出力の時に””を使用したりしなかったり

シェルスクリプトでは、全てが文字列だと思っておいていいです。
AAA も "AAA" も同じですし A"A"A も同じです。
" を使うと、
・空白等、通常引数の区切りに使われる文字をまとめて、引数に含めることができる
・一部の特殊な文字の展開を抑制できる
といった効果があります。

例えば、
*
と書くと、通常はファイル名に展開されてしまいます。
"*"
と書くと、 * そのものになります。


シェルでは、上記のような展開を全部やってから、コマンドを実行します。
どんなコマンドを実行しているか、は、 -x オプションで確認できます。
・bash -x スクリプト というように、 起動時に指定する
・ set -x を実行する (解除は set +x )
    • good
    • 0
この回答へのお礼

manコマンドマニュアルなんていうのがあるんですね
勉強になりました
なにせおととい始めたばかりなので用語も解らず調べるのも苦労していました。
ありがとうございました。

お礼日時:2018/01/21 08:40

> %とsの間のドットはどのような意味ですか?



echoの行を以下の様にして実行してみて、表示の違いを見れば分かりやすいのではないでしょうか。

echo $(printf "%.s$string" $(seq 100 110))
echo $(printf "%.0s$string" $(seq 100 110))
echo $(printf "%.1s$string" $(seq 100 110))
echo $(printf "%.2s$string" $(seq 100 110))
echo $(printf "%.3s$string" $(seq 100 110))


シェルスクリプト :: printf コマンド
http://tm.root-n.com/programming:shell_script:co …
    • good
    • 0
この回答へのお礼

ブログラミングは昨日はじめたばかりで不安なのですが
%.3sはシークェンスの整数部分を文字列として前方から3桁表示
そのように見えますが自身がないのでお聞かせください
ということであってますか??

お礼日時:2018/01/20 20:51

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報