调用函数时出现语法错误

调用函数时出现语法错误

因此,我尝试在脚本中创建一个函数,在运行脚本时为每个参数创建一个新变量。这是我的代码:

#!/bin/bash

# Creating function log
#ARG1=${1}

log() {
  echo "You called DA LOG FUNCTION!!!1!!11one111!"
}

log

#echo "${1}"
#echo "$ARG1"

fcta() {
  for ((x=0;x<1000;++x)); do
   "a$x"=${1}
   if [[ ${#} -gt 1 ]]; then
     shift
   else
     x=1001
   fi
  echo "${a$x}"
#  echo "${1}"
}

fcta $@

我明白了:

vagrant@localhost vagrant]$./luser-demo10.sh 12 12 12
You called DA LOG FUNCTION!!!1!!11one111!
./luser-demo10.sh: line 25: syntax error near unexpected token `}'
./luser-demo10.sh: line 25: `}'
[04:11----------------------------------------
vagrant@localhost vagrant]$

这是第 25 行

#  echo "${1}"
} <----- LINE 25

fcta $@

编辑:感谢您告诉我缺少的“完成”。人们问我想做什么,我问了另一个人问题为此,既然这个问题已经得到解答(问题是,为什么我收到语法错误)。再次感谢。

答案1

在您的函数中有一个do但没有匹配done来关闭命令列表。

尝试外壳检查验证您的脚本。这是脚本中检测到的错误和可疑点的报告:

Line 16:
  for ((x=0;x<1000;++x)); do
  ^-- SC1009: The mentioned syntax error was in this for loop.
      ^-- SC1073: Couldn't parse this arithmetic for condition. Fix to allow more checks.
                          ^-- SC1061: Couldn't find 'done' for this 'do'.

Line 25:
}
^-- SC1062: Expected 'done' matching previously mentioned 'do'.
 ^-- SC1072: Unexpected keyword/token. Fix any mentioned problems and try again.

答案2

andcoz 显示了您的代码中的错误(对于初学者来说,缺少done闭合循环),但我认为看起来好像你真的想要一个数组。

目前尚不清楚您希望代码执行什么操作,但看起来它大约相当于将命令行参数复制到数组中:

a=( "$@" )

${a[i]}然后,您可以使用ifi是具有整数值的变量来获取该数组的特定元素。

对展开的双引号至关重要,$@因为这将引用列表的各个元素$@。如果没有双引号,shell 将在空格上分割元素( 的内容IFS),并对它们执行文件名生成(“globbing”)。

用于break退出循环,而不是将循环变量设置为循环结束后的值。

相关内容