パラメーター拡張をプログラム・パラメーターに渡す必要があります。拡張結果は、スペースを含むファイル名です。そのため、ファイル名を1つの単語にするために二重引用符を使用しました"$var"
。
ファイル名が含まれている限り、$var
プログラムは単語引数を取得し、正しく機能します。ただし、場合によっては拡張によって空の文字列が生成され、引数として渡されるとプログラムが中断されることがあります(変更できません)。
Bashリファレンスマニュアルによると、空の文字列を削除しないことが指定された動作です。
値のないパラメータを二重引用符で拡張すると、空のパラメータが生成され保持されます。
しかし、変数を引用する必要がありますが、空の文字列拡張も削除する必要がある状況をどのように管理しますか?
編集する:
George Vasiliouのおかげで、私の質問に欠けている詳細があることがわかりました(短くしようとしています:))。プログラムの実行は、次のように短縮された長いJava呼び出しです。
java -cp /etc/etc MyClass param1 param2 "$var" param4
実際、if
Georgeが説明した説明を使用すると問題が解決します。ただし、これには、句に「$ var」がある呼び出しと句then
にelse
「$ var」がない呼び出しがそれぞれ必要です。
重複を避けるために、単一の呼び出しを使用して "$var"が空のときに拡張を削除する方法があるかどうかを確認したかったのです。
ベストアンサー1
これ${parameter:+word}
パラメータ拡張フォームが操作を完了しているようです。
( xyz=2; set -- ${xyz:+"$xyz"}; echo $# )
1
( xyz=; set -- ${xyz:+"$xyz"}; echo $# )
0
( unset xyz; set -- ${xyz:+"$xyz"}; echo $# )
0
したがって、これは次のように翻訳する必要があります。
program ${var:+"$var"}
あなたの場合