【发布时间】:2012-03-03 22:38:00
【问题描述】:
这里是代码
#file is named getpack2
count=0
while [ -n "$*" ] ; do
ARRAY[${count}]=$1
shift
count=`expr $count + 1`
done
for t in "${ARRAY[@]}"; do
mkdir $t
cd $t
touch hello
cd ..
done
我用来运行它的行是:
getpack2 vocals-doo flute-wood
这将创建所需的目录和文件
这也可以:
./getpack2 vocals-doo flute-wood
但是,当我在命令前加上 sudo:
sudo ./getpack2 vocals-doo flute-wood
它给了我以下错误
./getpack2: 7: ARRAY[0]=vocals-doo: not found
./getpack2: 7: ARRAY[1]=flute-wood: not found
./getpack2: 15: Bad Substitution
我对 shell 脚本很陌生。今天刚开始学。是否存在某种范围界定错误?
【问题讨论】:
-
为什么要计算参数计数?它在 $# 中可用
-
你可以在子shell中cd而不是“cd ..”:mkdir $t; (cd $t;触摸你好;)。 cd 和 touch 发生在不同的 shell 中,原始 shell 保留在同一目录中。这更不容易出错(随着脚本变得越来越复杂,跟踪原始目录变得越来越困难,并且确保 cd 返回可能变得具有挑战性。)