質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
シェルスクリプト

シェルスクリプトは、UNIX系のOSもしくはコマンドラインインタプリタ向けに記述されたスクリプト。bash/zshといったシェルによって実行されるため、このように呼ばれています。バッチ処理などに使用されており、テキストファイルに書かれた命令を順に実行します。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

UNIX

UNIXとは、AT&Tのベル研究所で開発されたコンピューター用のマルチユーザー・マルチタスクのオペレーションシステム(OS)です。政府や教育機関や研究所で広範囲に採用されています。

Q&A

解決済

1回答

8314閲覧

シェルスクリプトでダブルクォーテーションが必要か、スペースは必要か悩んでいます。

iii

総合スコア29

シェルスクリプト

シェルスクリプトは、UNIX系のOSもしくはコマンドラインインタプリタ向けに記述されたスクリプト。bash/zshといったシェルによって実行されるため、このように呼ばれています。バッチ処理などに使用されており、テキストファイルに書かれた命令を順に実行します。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

UNIX

UNIXとは、AT&Tのベル研究所で開発されたコンピューター用のマルチユーザー・マルチタスクのオペレーションシステム(OS)です。政府や教育機関や研究所で広範囲に採用されています。

0グッド

1クリップ

投稿2017/12/07 08:33

シェルスクリプトを書いているのですが、ダブルクォーテーションが必要か、スペースは必要かという細かい部分で悩んでいます。

変数を定義する際のことです。

DATE=date +%Y%m
でエラー無く動きました。

しかしあるサイトを見ていると、ダブルクォーテーションで囲んでいて、その書き方だと
DATE=date +"%Y%m"
となります。
しかしこれだとエラーになりました。

また
DATE=date +%Y%m→DATE=date+%Y%m
というように、dateの後のスペースが無くてもエラーになりました。

自分の中で混乱してしまっているのでどなたか整理して教えて頂けませんでしょうか。
よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

matobaa

2017/12/07 09:15

ダブルクォーテーションで囲んだときにエラーになりますか? 手元ではエラーにならないので、もうちょっと情報をください。どんなスクリプトで、どんなエラーになるのか。使用しているOSはなにか、シェルは何を使っているか。そのスクリプトをどのように実行しているのか。
iii

2017/12/08 02:46

私のタイプミスによるエラーでした。すみません。
guest

回答1

0

ベストアンサー

引用符で囲むのは、シェルの特殊文字(空白、<、>、|、& 等)を特殊文字としてではなく、そのままの文字として扱いたいときです。
従って、シェルの特殊文字が含まれない+%Y%mを引用符で囲む意味はありません。
例えば、年と月の間に空白を入れたいときは、空白はシェルの特殊文字で、引数の区切りを意味するので、"+%Y %m"または+%Y" "%mなどいろいろな書き方があり得ますが、空白が引数の区切りとみなされないようにする必要があります。
こういう「この場合は不要、この場合は必要」などいちいち考えるのが苦手な人は、「引数は全部引用符で囲む」と決めているような気がします。

無意味に囲んでdate +"%Y%m"と書いてもエラーになることはありませんので、エラーになったと思ったのは何らかの勘違いまたはタイプミスなどでしょう。

2つ目の質問ですが、コマンドと引数、引数と別の引数の間には空白文字(1つ以上の空白またはタブ)で区切る必要があります。
date+%Y%mと書くとそういう名前のコマンドを実行しようとして、存在しない場合はエラーになります。
そういう名前のファイルは作れるので、もし/bin/date+%Y%mという実行可能なファイルがあったとすればそれが実行されたことでしょう。

区切りの空白文字の個数は意味がありませんので、echo a becho a bは同じ結果です。

引用符には二重引用符"と一重引用符'がありますが、機能は少し異なります。また、直後の1文字だけ引用するバックスラッシュ(フォントによっては半角円記号)\もあります。

投稿2017/12/07 13:36

otn

総合スコア84555

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

iii

2017/12/08 02:46

ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問