因此,我尝试在脚本中创建一个函数,在运行脚本时为每个参数创建一个新变量。这是我的代码:
#!/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
退出循环,而不是将循环变量设置为循环结束后的值。