私は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/test
Bashスクリプト):
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/"test
1
2
3"/test.jpg
変数に入れた引用符は、結果の単語(の引数)のリテラルですraspistill
。変数拡張はいいえプレーンテキスト置換またはマクロ拡張: 通常、変数から出るすべてはシェル構文とは見なされません。引用符に加えて、シェル演算子(たとえば&&
、>
など|
)は、;
変数内で展開されたときに通常の文字にすぎません。ここでは、単語の分割とファイル名の生成が唯一の例外です。
あなたがしなければならないことは:
usbToSave="test 1 2 3"
raspistill -awb greyworld -vf -hf -o "/media/pi/$usbToSave/test.jpg"
つまり、変数の拡張は二重引用符内で行われるため、単語の区切り(およびファイル名の生成)が防止されます。
望むより: