我写了一个bash脚本,有3个命令行选项,bib,bob和boo...我想将用户选项读入一个同名的bash变量,如下所示:
PARSED_OPTIONS=$(getopt -n $0 --long "bib:,bob:,boo:" -- "$@")
eval set -- "$PARSED_OPTIONS";
while true; do
case "$1" in
--bib)
bib=$2
shift 2;;
--bob)
bob=$2
shift 2;;
--boo)
boo=$2
shift 2 ;;
--)
shift
break;;
esac
done
这一切都很好,到目前为止,很好。。。
但是现在我想把它扩展到一个包含许多选项的列表,所以与其写出一个很长的case语句,不如能够以某种方式循环一个选项列表并自动将选项传递给变量,沿着这些思路,这将是非常好的。
opts="bib:,bob:,boo:,"
PARSED_OPTIONS=$(getopt -n $0 --long $opts -- "$@")
for arg in `echo $opts | tr , " "` ; do
eval set -- "$PARSED_OPTIONS";
while true; do
case "$1" in
--${arg})
declare $arg=$2
shift 2
;;
--)
shift
break;;
esac
done
done
我使用声明语句将参数放入一个同名的动态变量中(请参阅Bash第二个解决方案中的动态变量名),这个解决方案通过逗号分隔的shell变量在逗号分隔的列表上循环,但我在这里得到了一个无限循环。我认为这两个未使用的选项是允许的,因为它们在PARSED_options列表中,但它们在循环中没有被切掉,因为只查找“arg”…我看不到明显的解决方法,但我肯定有一个。
我意识到我的shift命令仍然在case语句中,所以这就是它没有退出的原因。我还需要从参数中去掉冒号:,所以下面是我对bash脚本的自动参数检索:
# specify an arbitrary list of arguments:
opts=bib:,bob:,boo:
PARSED_OPTIONS=$(getopt -n $0 --long "${opts}" -- "$@")
for arg in ${opts//,/ } ; do
var=${arg//:} # remove the colon
eval set -- "$PARSED_OPTIONS";
while true ; do
case "$1" in
--${var})
declare ${var}=$2
;;
--)
break
;;
esac
shift 2
done
done
所以如果你尝试test_script--boo3--bib你好--bob lkkfrfrfr
echo $bib $bob $boo
应该给
hello lkkfrfrfr 3
我对bash脚本感到困惑。 我有以下代码: 我希望能够创建一个变量名称,其中包含命令的第一个参数并带有例如的最后一行的值。 为了说明我想要什么: 那么,我应该如何定义/声明,我应该如何在脚本中调用它? 我试过、、,但我仍然感到困惑。
问题内容: 我有一个json对象是这样的: 我试图这样解析: 但是我不知道如何访问动态名称。我们如何解析这样的JSON -注意-Ya的 所有值都带有引号,例如:“ Yg&R_” 问题答案: 试试这个动态的JSON解析器
我想使用在数据帧中创建多个新列。列名及其内容应动态生成。 来自IRIS的示例数据: 我创建了一个函数来从变量中更改新列:
我想使用<code>dplyr::mutate()</code>在数据帧中创建多个新列。应动态生成列名及其内容。 来自iris的示例数据: 我创建了一个函数,可以从<code>Petal中修改我的新列。宽度变量: 现在我创建一个循环来构建我的列: 然而,由于mutate认为varname是一个文字变量名,因此循环只创建一个新变量(称为varname),而不是四个(称为petal.2-petal.5
问题内容: 在PHP中,您可以执行以下令人惊奇/可怕的事情: 有没有办法用Java做类似的事情? 例如,如果我有一个名称,可以得到对变量的引用吗? 问题答案: 由于ECMA-/ JavaScript是所有关于和(其也somekind的对象的),每个变量被存储在这样的被称为 可变 (或在功能方面,的情况下, 激活对象 )。 因此,如果您创建这样的变量: 在 全局范围 (= NO函数上下文)中,您将这
问题内容: 我想使用运行时之前不知道的字段名称过滤器来调用查询…不确定如何构造变量名称…或者我很累。 如果funct()返回的名称等于 不知道该怎么做… 问题答案: 您可以创建字典,设置参数,然后通过解压缩字典作为关键字参数将其传递给函数: