Bashでスペースを含むディレクトリの周りに二重引用符を使用する方法

Bashでスペースを含むディレクトリの周りに二重引用符を使用する方法

私はRaspberry Pi OSで作業しています。

#!/bin/bash名前にスペースが含まれているディレクトリにファイル(キャプチャした画像)を保存する必要があるBashスクリプトを実行しています。

私の場合、ディレクトリは次のようになります。/media/pi/test 1 2 3

私が実行して必要なタスクを実行するコマンドは次のとおりです。

raspistill -awb greyworld -vf -hf -o /media/pi/"test 1 2 3"/test.jpg

写真を撮ってそこに保存すると、とてもうまくいきます。

私の問題は、「test 1 2 3」が次の変数の中にあることを望んでいることです。

usbToSave="\"test 1 2 3\"" #usbToSave is now "test 1 2 3"
raspistill -awb greyworld -vf -hf -o /media/pi/$usbToSave/test.jpg

しかし、上記は私に次のエラーを与えます:

Invalid command line option (1)

理由がわからない。フォーラムのどこかに似た質問に対する答えがあるようですが、見つかりません。検索時に適切なキーワードを使用していないようです。

メモ:

私のディレクトリにスペースがない場合(例:/media/pi/testBashスクリプト):

usbToSave="test"
raspistill -awb greyworld -vf -hf -o /media/pi/$usbToSave/test.jpg

エラーなしで動作します。

ベストアンサー1

usbToSave="\"test 1 2 3\""
raspistill -awb greyworld -vf -hf -o /media/pi/$usbToSave/test.jpg

ここで変数の値に引用符を入力すると、割り当て後にが含まれます"test 1 2 3"。その後、二重引用符を使用せずに変数を拡張するため、単語分離の問題が発生します(以下のリンクを参照)。結果は、およびを別のコマンドライン引数にインポートraspistillすることです。/media/pi/"test123"/test.jpg

変数に入れた引用符は、結果の単語(の引数)のリテラルですraspistill変数拡張はいいえプレーンテキスト置換またはマクロ拡張: 通常、変数から出るすべてはシェル構文とは見なされません。引用符に加えて、シェル演算子(たとえば&&>など|)は、;変数内で展開されたときに通常の文字にすぎません。ここでは、単語の分割とファイル名の生成が唯一の例外です。

あなたがしなければならないことは:

usbToSave="test 1 2 3"
raspistill -awb greyworld -vf -hf -o "/media/pi/$usbToSave/test.jpg"

つまり、変数の拡張は二重引用符内で行われるため、単語の区切り(およびファイル名の生成)が防止されます。

望むより:

おすすめ記事