68

パスを指す変数を持つプロパティファイルを(メインからソースを実行して)使用するメインファイルがあります。

プロパティファイルは次のようになります。

TMP_PATH=/$COMPANY/someProject/tmp
OUTPUT_PATH=/$COMPANY/someProject/output
SOME_PATH=/$COMPANY/someProject/some path

問題はSOME_PATH、スペースのあるパスを使用する必要があることです(変更できません)。

引用符を使用して空白をエスケープしようとしましたが、これまでのところ解決策はありません。

$COMPANYパスを編集しました。一重引用符の問題は、パスで別の変数を使用していることです。

4

6 に答える 6

86

次の 3 つのバリアントのいずれかを使用します。

SOME_PATH="/mnt/someProject/some path"
SOME_PATH='/mnt/someProject/some path'
SOME_PATH=/mnt/someProject/some\ path
于 2012-10-15T19:03:17.637 に答える
47

自分で解決策を見つけた Federico ですね。問題は 2 か所にありました。あなたの場合、割り当てには適切な引用が必要です

SOME_PATH="/$COMPANY/someProject/some path"

可能な解決策の1つです。

しかし、シェルでは、これらの引用符はメモリに保存されないため、この変数を使用する場合は、再度引用する必要があります。次に例を示します。

NEW_VAR="$SOME_PATH"

そうでない場合、スペースは次のようにコマンドレベルに拡張されます。

NEW_VAR=/YourCompany/someProject/some path

これはあなたが望むものではありません。

詳細については、それに関する私の記事をチェックしてください http://www.cofoh.com/white-shell

于 2012-10-22T06:04:55.490 に答える
20

「スペース」文字は、直前に \ を置くことでエスケープできます。

于 2012-10-15T19:01:37.757 に答える
4
SOME_PATH=/mnt/someProject/some\ path

動作するはずです

于 2012-10-15T19:01:01.890 に答える
1

ファイルにパラメーターの割り当てのみが含まれている場合は、ソースの代わりに次のループを使用できます。

# Instead of source file.txt
while IFS="=" read name value; do
    declare "$name=$value"
done < file.txt

これにより、ファイル内の何かを引用する必要がなくなり、また、から任意のコードを実行するリスクがないため、より安全になりますfile.txt

于 2012-10-15T19:05:30.650 に答える