如何在for循环中使用$ 1 $ 2 ...之类的参数?

阿米尔雷扎·费罗兹(AmirrezaFiroozi)

我有这个脚本,旨在下载您作为参数输入的单词的发音:

#!/bin/bash 
m=$#
for ((i=1;i<=m;i++));do

echo $i
#wget https://ssl.gstatic.com/dictionary/static/sounds/de/0/"$i".mp3
done

如果我通过此命令运行它

./a.sh personality brave selfish

它应该在标准输出上打印

personality 
brave 
selfish

但是它打印

1
2
3

您能帮我解决这个问题吗?

ps:例如,如果我编写的脚本没有带$ 1的for循环,它将可以正常工作,但是我想同时下载许多文件

斯蒂芬·查泽拉斯(Stephane Chazelas)

在任何类似伯恩的外壳中,它是:

for arg
do printf 'Something with "%s"\n' "$arg"
done

也就是说,默认情况下会for在位置参数($1$2...)上循环(如果您不提供in ...零件的话)。

请注意,它比:

for arg; do
  printf 'Something with "%s"\n' "$arg"
done

直到2016年版标准和Bourne才使用POSIX(尽管可以在大多数其他类似Bourne的shell中使用,bash即使在POSIX模式下也可以使用)

或比:

for arg in "$@"; do
  printf 'Something with "%s"\n' "$arg"
done

这是POSIX,但是在$IFS不包含空格字符的情况下在Bourne shell或ksh88中无法正常工作,或者在没有参数的情况下在Bourne shell的某些版本中无法运行,或者在不包含空格的情况下在某些shell(包括的某些版本bash)中无法正常运行参数,并且该-u选项已启用。

或比

for arg do
  printf 'Something with "%s"\n' "$arg"
done

这是POSIX和Bourne,但不能在非常旧的基于灰的shell中使用。我个人忽略了这一点,而是自己使用了该语法,因为我发现它是最易读的,并且不希望我编写的任何代码最终都会被这种神秘的外壳解释。

有关更多信息,请访问:


现在,如果您确实想$i循环[1..$#]访问相应的元素,则可以执行以下操作:

在任何POSIX Shell中:

i=1
for arg do
  printf '%s\n' "Arg $i: $arg"
  i=$((i + 1))
done

或者:

i=1
while [ "$i" -le "$#" ]; do
  eval "arg=\${$i}"
  printf '%s\n' "Arg $i: $arg"
  i=$((i + 1))
done

或搭配 bash

for ((i = 1; i <= $#; i++ )); do
  printf '%s\n' "Arg $i: ${!i}"
done

${!i}是间接变量扩展,扩展为名称存储在i变量中的参数的内容,类似于zshP参数扩展标志:

for ((i = 1; i <= $#; i++ )); do
  printf '%s\n' "Arg $i: ${(P)i}"
done

尽管在中zsh,您还可以通过$argv数组访问位置参数(如中的csh):

for ((i = 1; i <= $#; i++ )); do
  printf '%s\n' "Arg $i: $argv[i]"
done

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在嵌套在批处理文件中的 for 循环中使用参数 2?

来自分类Dev

如何在循环中使用参数值

来自分类Dev

如何在bash脚本的for循环中使用参数变量?

来自分类Dev

如何在For循环中使用2个变量?

来自分类Dev

如何在Python argparse中使用`--foo 1 --foo 2`样式参数?

来自分类Dev

查找用户必须在其中输入带有'sum(par1,par2,...)'之类的参数的命令的总和

来自分类Dev

查找用户必须在其中输入带有'sum(par1,par2,...)'之类的参数的命令的总和

来自分类Dev

如何在robotframework中使用带有2个参数的For循环?

来自分类Dev

如何在for循环中使用第三个参数?

来自分类Dev

如何在循环中使用jQuery和带有参数的JSON生成动态HTML?

来自分类Dev

如何在foreach循环中使用&&运算符来同时迭代2个集合

来自分类Dev

如何在foreach循环中使用&&运算符来同时迭代2个集合

来自分类Dev

Yii2:如何在foreach循环中使用rtrim?

来自分类Dev

如何检查“ +10”之类的“ delta”参数

来自分类Dev

如何在文件名前添加1_ 2_之类的升序数字?

来自分类Dev

如何在重写语句中使用nginx if的参数$ 1

来自分类Dev

如何在重写语句中使用nginx if的参数$ 1

来自分类Dev

如何获得像(1-2 pm)或(2-3 pm)之类的时间

来自分类Dev

如何在共享资源作为参数的for循环中使用std future和async与线程异步处理?

来自分类Dev

如何在闪亮的应用程序中使用knitr:html2html之类的rmarkdown :: render?

来自分类Dev

如何在 Web API v2 中使用参数?

来自分类Dev

Perl:如果变量为a1 a2 a3格式,如何在循环中获取变量的值

来自分类Dev

如何在Bash中遍历参数($ 1 $ 2 $ 3等)?

来自分类Dev

如何在Bash中遍历参数($ 1 $ 2 $ 3等)?

来自分类Dev

如何在for循环中遍历参数

来自分类Dev

为什么`“%,2,%”之类的“,1,2,3,”`返回零?

来自分类Dev

R-如何在循环中使字符串str_extract模式参数化

来自分类Dev

如何在Python中使用诸如“ 1小时5秒”之类的字符串添加当前日期

来自分类Dev

在While循环中使用1 == 1或true

Related 相关文章

  1. 1

    如何在嵌套在批处理文件中的 for 循环中使用参数 2?

  2. 2

    如何在循环中使用参数值

  3. 3

    如何在bash脚本的for循环中使用参数变量?

  4. 4

    如何在For循环中使用2个变量?

  5. 5

    如何在Python argparse中使用`--foo 1 --foo 2`样式参数?

  6. 6

    查找用户必须在其中输入带有'sum(par1,par2,...)'之类的参数的命令的总和

  7. 7

    查找用户必须在其中输入带有'sum(par1,par2,...)'之类的参数的命令的总和

  8. 8

    如何在robotframework中使用带有2个参数的For循环?

  9. 9

    如何在for循环中使用第三个参数?

  10. 10

    如何在循环中使用jQuery和带有参数的JSON生成动态HTML?

  11. 11

    如何在foreach循环中使用&&运算符来同时迭代2个集合

  12. 12

    如何在foreach循环中使用&&运算符来同时迭代2个集合

  13. 13

    Yii2:如何在foreach循环中使用rtrim?

  14. 14

    如何检查“ +10”之类的“ delta”参数

  15. 15

    如何在文件名前添加1_ 2_之类的升序数字?

  16. 16

    如何在重写语句中使用nginx if的参数$ 1

  17. 17

    如何在重写语句中使用nginx if的参数$ 1

  18. 18

    如何获得像(1-2 pm)或(2-3 pm)之类的时间

  19. 19

    如何在共享资源作为参数的for循环中使用std future和async与线程异步处理?

  20. 20

    如何在闪亮的应用程序中使用knitr:html2html之类的rmarkdown :: render?

  21. 21

    如何在 Web API v2 中使用参数?

  22. 22

    Perl:如果变量为a1 a2 a3格式,如何在循环中获取变量的值

  23. 23

    如何在Bash中遍历参数($ 1 $ 2 $ 3等)?

  24. 24

    如何在Bash中遍历参数($ 1 $ 2 $ 3等)?

  25. 25

    如何在for循环中遍历参数

  26. 26

    为什么`“%,2,%”之类的“,1,2,3,”`返回零?

  27. 27

    R-如何在循环中使字符串str_extract模式参数化

  28. 28

    如何在Python中使用诸如“ 1小时5秒”之类的字符串添加当前日期

  29. 29

    在While循环中使用1 == 1或true

热门标签

归档