我设置了一个命令行参数如下:
$TOKENARG='Authorization: Bearer 9042f9a3caacc63419be489aefec02a5eae338c33'
curl -v -X DELETE -H $(echo $TOKENARG) http://localhost:3001/api/v1/articles/3
期望的结果是:
curl -v -X DELETE -H 'Authorization: Bearer 9042f9a3caacc63419be489aefec02a5eae338c33' http://localhost:3001/api/v1/articles/3
但是当我运行上面的那个时它没有按预期工作并返回以下消息:
卷曲:(6)无法解决主持人:持票人 *重建网址:9042f9a3caacc63419be489aefec02a5eae338c33
无法解析主持人:9042f9a3caacc63419be489aefec02a5eae338c33
我应该如何使用变量传递参数?
答案 0 :(得分:0)
因为您没有引用命令替换,所以字符串分为三个单词9042f9a3caacc63419be489aefec02a5eae338c33
,curl -v -X DELETE -H "$(echo $TOKENARG)" http://localhost:3001/api/v1/articles/3
和echo
。为了防止这种情况,你可以引用它:
$(command)
但您根本不需要command
和命令替换:curl -v -X DELETE -H "$TOKENARG" http://localhost:3001/api/v1/articles/3
具有与$tokenarg='Authorization: Bearer 9042f9a3caacc63419be489aefec02a5eae338c33'
curl -v -X DELETE -H "$tokenarg" http://localhost:3001/api/v1/articles/3
相同的输出,因此您可以使用
static final Pattern UNICODE = Pattern.compile("\\\\u([0-9a-fA-F]{4})");
static String decodeUnicodeEscape(String s) {
Matcher m = UNICODE.matcher(s);
StringBuffer sb = new StringBuffer();
while (m.find())
m.appendReplacement(sb,
String.valueOf((char)Integer.parseInt(m.group(1), 16)));
m.appendTail(sb);
return sb.toString();
}
旁注:所有大写变量名只能用于环境变量,例如参见POSIX spec(第四段),所以最好是
System.out.println(decodeUnicodeEscape(" vi\\u1EC7t nam"));