所以我尝试在脚本中创建一个函数,在运行脚本时为每个参数创建一个新变量。这是我的代码:
#!/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 $@
编辑:感谢您告诉我丢失的“完成”。人们问我想做什么,好吧,我问了另一个问题,因为这个问题已经得到解答(问题是,为什么我会收到语法错误)。再次感谢。
在您的函数中,有一个
do
但没有匹配项done
来关闭命令列表。尝试shellcheck来验证您的脚本。这是脚本中检测到的错误和可疑点的报告:
andcoz 显示了您的代码中有什么问题(对于初学者来说,缺少
done
关闭循环),但我认为它看起来好像您真的想要一个数组。目前尚不清楚您希望代码做什么,但它看起来大致相当于将命令行参数复制到数组:
${a[i]}
然后,您可以使用ifi
是具有整数值的变量来获取该数组的特定元素。双引号是至关重要的,
$@
因为这会引用列表的各个元素$@
。如果没有双引号,shell 会将元素拆分为空格( 的内容IFS
),并对它们执行文件名生成(“globbing”)。用于
break
退出循环,而不是将循环变量设置为循环结束后的值。