shell脚本的数组
❶ 请问在这个shell脚本中为什么两个数组长度不一样
unset 不能这么用,需要指定数组索引,也就是数组下标,而不是数组的值,你可以这样干:
#check if there are any files added
folder_list=(1 2 3 4 5)
file_list=(1 2)
declare -a result_list
t=0
flag=0
echo folder_list=${folder_list[*]}
echo file_list=${file_list[*]}
for m in "${folder_list[@]}"
do
for l in "${file_list[@]}"
do
if [ "$m" == "$l" ]; then
flag=1
break
fi
done
if [ $flag -eq 0 ]; then
result_list[t]=$m
t=$((t+1))
else
flag=0
fi
done
echo result_list=${result_list[*]}
弄个结果数组保存结果,把在file_list里找不到的folder_list值存到结果数组中。
本回答由提问者推荐
❷ Shell脚本如何传递数组参数或Shell中有引用传递吗
取第三个参数值使用$3.以下是一些shell执行的特殊变数,供你参考:
$0 这个程式的执行名字
$n 这个程式的第n个参数值,n=1..9
$* 这个程式的所有参数
$# 这个程式的参数个数
$$ 这个程式的PID
$! 执行上一个背景指令的PID
$? 执行上一个指令的返回值
$@ 跟$*类似,但是可以当作数组用
❸ 请教一个shell脚本 输出到数组
[root@localhost ~]# ls aa
123 a.py
[root@localhost ~]# a=`ls aa`
[root@localhost ~]# for i in ${a[@]};do echo $i ;done
123
a.py
❹ shell脚本中,无法获取“关联数组”(字典)的key,尝试过很多方法,输出都不对,求教
看下你使用的bash版本到没到4.0,使用指令bash --version查看
使用变量前先确认该变量是否在之前已经被定义过了 使用source 命令或 . 命令启动脚本时是不会开辟新线程的所以你在bash窗口里定义的没加local 变量 都会被脚本继承 此时你可以先删除这个变量 即定义phone 时 unset phone
❺ linux shell脚本中,数组名称是一个变量,怎么打印出它里面的元素
题主你好,
代码及测试截图如下:
希望可以帮到题主, 欢迎追问.
❻ shell脚本用for循环数组出来的还是数组本身是什么原因
for...in 语句用于对数组或者对象的属性进行循环操作。
语法:
for (变量 in 对象){ 在此执行代码}
for循环是对数组的元素进行循环,而不能引用于非数组对象。
语法:
for(int 变量初始值;条件;递增或递减){ 在此执行代码}
举例:
var array=[1,2,3,4,5];//定义一个数组,实现数组元素的遍历。用For...in实现for(var i in array){ alert(array[i]);//数组的元素}用for循环实现for(var i=0;i<array.length;i++){ alert(array[i]);//数组的元素}
❼ shell脚本名字中含有参数的数组定义、调用、打印问题
实际上,bash中可以直接对数组赋值的,不需要使用declare。而且取长度的用法${#var}也只能是在bash中。这些都不是符合POSIX标准的用法,而是bash所特有的。所以,要简单点的话,就将声明改为bash,即#!/bin/bash。当然,还有两处小错,要仔细点:var=(12335);#赋值时等号两边不能有空格echo"${#var};#引号不成对啊,这里也可以不要引号的命令后面的分号其实也是多余的,只要换行了,分号就不需要(当然加了也没错)
❽ shell脚本中无法对数组赋值
第一行申明shell的时候sh改为bash就好了。
( ) 这种赋值方法在sh里不支持。
❾ shell脚本中数组array常用技巧学习实践
shell中数组的下标默认是从0开始的
1。将字符串放在数组中,获取其长度
#!/bin/bash
str=a
b
--n
d
array=($str)
length=${#array[@]}
echo
$length
for
((i=0;
i<$length;
i++))
do
echo
${array[$i]}
done
执行结果:
[oracle@99bill-as9
array]$
sh
length.sh
4
a
b
--n
d
打印字符串:
#!/bin/bash
str=a
b
c
for
i
in
$str
do
echo
$i
done
或者:
#!/bin/bash
str=a
b
c
array=($str)
for
((i=0;i<${#array[@]};i++))
do
echo
${array[$i]}
done
执行结果:
2。字符串用其他字符分割时
#!/bin/bash
str2=a#b#c
a=($(echo
$str2
|
tr
'#'
'
'
|
tr
-s
'
'))
length=${#a[@]}
for
((i=0;
i<$length;
i++))
do
echo
${a[$i]}
done
#echo
${a[2]}
执行结果:
3。数组的其他操作
#!/bin/bash
str=a
b
--n
dd
array=($str)
length=${#array[@]}
#ouput
the
first
array
element直接输出的是数组的第一个元素
echo
$array
#Use
subscript
way
access
array用下标的方式访问数组元素
echo
${array[1]}
#Output
the
array输出这个数组
echo
${array[@]}
#Output
in
the
array
subscript
for
3
the
length
of
the
element输出数组中下标为3的元素的长度
echo
${#array[3]}
#Output
in
the
array
subscript
1
to
3
element输出数组中下标为1到3的元素
echo
${array[@]:1:3}
#Output
in
the
array
subscript
greater
than
2
elements输出数组中下标大于2的元素
echo
${array[@]:2}
#Output
in
the
array
subscript
less
than
2
elements输出数组中下标小于2的元素
echo
${array[@]::2}
执行结果:
a
b
a
b
--n
dd
2
b
--n
dd
--n
dd
a
b
4。遍历访问一个字符串(默认是以空格分开的,当字符串是以其他分隔符分开时可以参考2)
#!/bin/bash
str=a
--m
for
i
in
$str
do
echo
$i
done
执行结果:
a
--m
5。如何使用echo输出一个字符串str=-n.
由于-n是echo的一个参数,所以一般的方法echo
$str是无法输出的.
解决方法可以有:
echo
x$str
|
sed
's/^x//'
echo
-ne
$str/n
echo
-e
$str/n/c
printf
%s/n
$str(这样也可以)
作者祝莹的专栏