小编nic*_*kl-的帖子

bash字符串引用了多字args到数组

问题:

在bash脚本编写中,将包含多个单词的文字引号的字符串转换为具有相同解析参数结果的数组的最佳方法是什么?

争议:

存在许多问题,都是采用规避策略来避免问题而不是寻找解决方案,这个问题提出了以下论点,并希望鼓励读者关注论点,如果你愿意接受它,就要参与挑战,找到最佳选择.解.

提出的论点:

  1. 虽然有许多情况应该避免这种模式,因为存在更适合的替代解决方案,但作者认为仍然存在有效的用例.这个问题将尝试产生一个这样的用例,但不要仅仅认为它是可以想象的场景,它可能出现在现实世界的情况中.
  2. 您必须找到满足要求的最佳解决方案.该用例是专门针对其实际应用而选择的.您可能不同意所做出的决定,但并不负责仅提供解决方案的意见.
  3. 在不修改输入或选择运输的情况下满足要求.两者都是通过现实场景特别选择来捍卫这些部分不受你控制的叙述.
  4. 特定问题没有答案,这个问题旨在解决这个问题.如果您倾向于避免这种模式,那么只需避免这个问题,但如果您认为自己已经接受了挑战,那么请看看您将如何解决问题.

有效用例:

转换当前正在使用的现有脚本,以通过命名管道或类似流接收参数.为了最大限度地减少对开发人员控制之外的无数脚本的影响,决定不更改接口.现有脚本必须能够像以前一样通过新流实现传递相同的参数.

现有实施:

$ ./string2array arg1 arg2 arg3
args=(
    [0]="arg1"
    [1]="arg2"
    [2]="arg3"
)
Run Code Online (Sandbox Code Playgroud)

要求的变更:

$ echo "arg1 arg2 arg3" | ./string2array
args=(
    [0]="arg1"
    [1]="arg2"
    [2]="arg3"
)
Run Code Online (Sandbox Code Playgroud)

问题:

正如Bash和Double-Quotes所指出的那样,传递给argv的文字引号不会像预期的那样被解析.

此工作台脚本可用于测试各种解决方案,它处理传输并制定可测量的响应.建议您专注于使用字符串作为参数获取的解决方案脚本,并且应该将$ args变量填充为数组.

string2array工作台脚本:

#!/usr/bin/env bash
#string2arry

args=()

function inspect() {
  local inspct=$(declare -p args)
  inspct=${inspct//\[/\\n\\t[}; inspct=${inspct//\'/}; inspct="${inspct:0:-1}\n)"
  echo -e ${inspct#*-a }
}

while read -r; do
  # source the solution to turn $REPLY in $args array
  source $1 "${REPLY}" …
Run Code Online (Sandbox Code Playgroud)

arrays string bash arguments argument-passing

7
推荐指数
1
解决办法
2509
查看次数

可比较的compareTo允许像Comparator nullsFirst或nullsLast这样的空值

有无数的问题和答案ComparableComparator但似乎没有一个解决这个问题。

假设我有这个方法compare,它接受 a 和 b 的任何Comparable实现并返回比较 -1、0 或 1。

static <U,T extends Comparable<U>> int compare(T a, U b) {
    return a.compareTo(b);
}
Run Code Online (Sandbox Code Playgroud)

与任何Comparable东西一起工作都很好而且花花公子。整个企业的每个项目都采用该方法。

jshell> compare(1, 2);
$1 ==> -1

jshell> compare("id", "hi");
$2 ==> 1
Run Code Online (Sandbox Code Playgroud)

然后数据突然发生变化,我们开始遇到问题。


jshell> compare(null, "hi");
|  Exception java.lang.NullPointerException: Cannot invoke "java.lang.Comparable.compareTo(Object)" because "<parameter1>" is null
|        at compare (#1:2)
|        at (#2:1)

jshell> compare(1, null);
|  Exception java.lang.NullPointerException: Cannot read field "value" because "anotherInteger" is null …
Run Code Online (Sandbox Code Playgroud)

java

1
推荐指数
1
解决办法
794
查看次数

尝试设置GCM演示应用程序 - 设备注册不起作用

所以我一直在关注Google的教程,在Android模拟器上设置GCM演示应用程序(http://developer.android.com/guide/google/gcm/demo.html).我让服务器端工作 - 我有一个tomcat服务器显示"没有设备注册!" 在GCM演示页面上.我在带有目标Google API的Android模拟器上安装了客户端应用程序(试图让GCM在一个目标4.1上运行,只是吐出"不幸的是,GCM Demo已停止"每次运行应用程序时) - 应用程序运行成功,但它无法连接到服务器注册设备(它经历了所有5次尝试).我确实将SERVER_URL,SENDER_ID和api.key编辑为正确的值(我已经按照教程的每一步) - 我在这里缺少什么?模拟器上的浏览器似乎也能正常工作.

编辑:固定网址到演示 - 尼克

android registration android-c2dm google-cloud-messaging

0
推荐指数
1
解决办法
8328
查看次数