shellの受け渡し値でスペースを含めたい時の対応

Pocket
LINEで送る
GREE にシェア
LinkedIn にシェア

shellプログラムを書いている時に、スペース付きで値を受け渡したい時があります。

そんな時の対応をメモしておきます。

基本ソース

get.shというプログラムを作り、後ろにクエリとして受け渡し値をつけると、それを表示するプログラムです。

get.sh

お試し

半角スペースを入れたい場合

クォーテーションで対応してみる

“aaa”と”bbb ccc”のようにしたい場合はどうすればいいんでしょう?

とりあえず、クォーテーションで囲ってみる

ダメでした・・・orz

そりゃそうですよね。こんな簡単にできるぐらいなら、僕もブログ記事など書かないです。

バックスラッシュで対応してみる

ダメでした・・・orz

ダメもとでクォーテーション+バックスラッシュで対応してみる

もっとダメでした。
\が文字として扱われてしまいます。

その後も、「\\」や「\\\」など、エスケープをとことん試してみましたが、ダメでした・・・

shellプログラム内での文字列の扱いについて

shell内における型は意外とちゃんと対応しないといけなくて、文字列は「”」クォーテーションで囲むことで型を変更することができるという
if文の時に、$A == “A”と “$A” == “A”で結果が変わる事からなんとなく対応方法が分かった。

ソース改修して完了

get.sh

さらに、クエリー番号を明確にするために、クォーテーションをつけて実行

できました!!

簡単にできたようですが、shell内部における文字列を認識しておかなければいけません。
変数に入れても、クォーテーションをつけないと文字列扱いされないという事がわかってもらえると、今後トラブらないと思います。

注意点

クォーテーションも「”」ダブルクォートと「’」シングルクォートがあり、シングルの場合はshellにおいては扱いが変わってくるので、今回は全てダブルクォートで扱ってください。

また、半角スペースだけでなく、文字列としてダブルクォートがある場合などもあるので、エスケープして対応してください。

Leave a Reply

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です