Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 使用for循环bash中传递的参数生成字符串_Linux_Bash_Variables_Escapestring - Fatal编程技术网

Linux 使用for循环bash中传递的参数生成字符串

Linux 使用for循环bash中传递的参数生成字符串,linux,bash,variables,escapestring,Linux,Bash,Variables,Escapestring,我正在编写一个bash脚本,其中包含大量参数。它看起来像这样: bash script.sh 713884440 1041 691539599 Digiweb 371449356 Dublin ... 由于有大量的参数,并且参数的数量因情况而异,因此我想构建一个字符串,该字符串接受所有参数,并将其置于以下形式: element.713884440="1041" -d element.691539599="Digiweb" -d element.371449356="Dublin"... 我最

我正在编写一个bash脚本,其中包含大量参数。它看起来像这样:

bash script.sh 713884440 1041 691539599 Digiweb 371449356 Dublin ...
由于有大量的参数,并且参数的数量因情况而异,因此我想构建一个字符串,该字符串接受所有参数,并将其置于以下形式:

element.713884440="1041" -d element.691539599="Digiweb" -d element.371449356="Dublin"...
我最初尝试编写一个for循环来实现这一点。对于循环的第一次迭代,我认为${$I}将首先计算为$1,然后计算为713884440


这不管用。我试着通过echo和eval解析内部变量,但这些都不起作用。如何实现这一点?

虽然这对字符串的第一部分有效,但我希望它能够使S计算为S=$S-d条目。在循环的第二次迭代中,$3=\$4\您希望第三次迭代中使用什么?也许你可以展示最终结果?@JKing轮班2完成了这一点。它从列表中删除前两个参数,并将其余参数向下移动两个,以便在第二次迭代中,$1引用第三个参数,$2引用第四个参数。类似地,在第三次迭代中,$1引用第五个参数,$2引用第六个参数,以此类推。是的,但它是每个迭代的元素,他想要第二个参数的条目。接下来呢?看起来您正在准备一个参数列表,以便传递给其他命令。如果是这样的话,你会遇到麻烦,因为在变量中嵌入引号根本不像你期望的那样有效。您应该改用数组。再见,谢谢!这就是我最后做的。
S=""
while [ $# -ge 2 ]
do
  S="$S -d element.$1=\"$2\""
  shift 2
done
echo $S
S=""
while [ $# -ge 2 ]
do
  S="$S -d element.$1=\"$2\""
  shift 2
done
echo $S