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

这两个命令中的任何一个都将产生以下 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 回答