0

bashスクリプトに次のコマンドがあります:

sudo java -jar ./myjar.jar name_%1$tY%1$tm.csv ./sql/blablab.sql someArgument

また

sudo java -jar ./myjar.jar "name_%1$tY%1$tm.csv" ./sql/blablab.sql someArgument

これら 2 つのコマンドはいずれも、次の 3 つの引数を生成します。

Arguments :   name_%1%1.csv  ./sql/blablab.sql  someArgument

ご覧のとおり、%および/または$エスケープされませんでした。彼らから逃れる方法を探しています。

よろしくお願いします

4

2 に答える 2

4

bash では、引用符で囲まれていないバックスラッシュ\がエスケープ文字です。を除いて、次の文字のリテラル値を保持します\n%文字をエスケープする必要はありませんが、エスケープする必要があります。そうしないと$、bash はそれを変数と見なして展開します。

あなたの場合、

sudo java -jar ./myjar.jar name_%1\$tY%1\$tm.csv ./sql/blablab.sql someArgument

動作するはずです。

于 2013-01-22T11:14:46.873 に答える
2

これを試して:

sudo java -jar ./myjar.jar 'name_%1$tY%1$tm.csv' ./sql/blablab.sql someArgument

$これは、すべての文字を にエスケープしないことを前提としていますjava。他の方法があります:

example_$notAVar$aVar    # yields example_
example_\$notAVar\$aVar  # yields example_$notAVar$aVar
aVar=42
example_$notAVar$aVar    # yields example_42
'example_$notAVar$aVar'  # yields example_$notAVar$aVar
"example_\$notAVar$aVar" # yields example_$notAVar42
example_\$notAVar$aVar   # yields example_$notAVar42
'example_$notAVar'$aVar  # yields example_$notAVar42
于 2013-01-22T11:15:07.467 に答える