linux shell支持列表数据结构吗?
这个问题和我的不一样 我知道很多脚本语言支持列表结构,比如python、python、ruby和javascript,那么linux shell呢 shell支持这样的语法吗linux shell支持列表数据结构吗?,linux,bash,shell,ash,Linux,Bash,Shell,Ash,这个问题和我的不一样 我知道很多脚本语言支持列表结构,比如python、python、ruby和javascript,那么linux shell呢 shell支持这样的语法吗 for i in list: do print i done 我首先要初始化一个列表,例如: ListName = [ item1, item2, ..., itemn ] 然后对其进行迭代 在编写shell脚本时,这可能吗?要创建列表,只需这样做即可 colors=(red orange white "li
for i in list:
do
print i
done
我首先要初始化一个列表,例如:
ListName = [ item1, item2, ..., itemn ]
然后对其进行迭代
在编写shell脚本时,这可能吗?要创建列表,只需这样做即可
colors=(red orange white "light gray")
从技术上讲,它是一个数组,但-当然-它具有所有列表功能。甚至python列表也是用数组实现的,它支持列表,但不支持作为单独的数据结构(暂时忽略数组)
for
循环在空白分隔值的列表(在一般意义上)上迭代,而不管该列表是如何创建的,无论是否按字面意思:
for i in 1 2 3; do
echo "$i"
done
或通过参数扩展:
listVar="1 2 3"
for i in $listVar; do
echo "$i"
done
或命令替换:
for i in $(echo 1; echo 2; echo 3); do
echo "$i"
done
数组只是一个特殊的参数,它可以包含一个更结构化的值列表,其中每个元素本身都可以包含空格。比较差异:
array=("item 1" "item 2" "item 3")
for i in "${array[@]}"; do # The quotes are necessary here
echo "$i"
done
list='"item 1" "item 2" "item 3"'
for i in $list; do
echo $i
done
for i in "$list"; do
echo $i
done
for i in ${array[@]}; do
echo $i
done
要遍历数组,请对${colors[*]}中的项使用
;不要重复$item;完成
@Neevek,它不会做你认为它会做的事;“浅灰色”将被视为“浅”和“灰色”两项。您需要使用“${colors[@]}”
(@
不是*
,并引用)。为什么使用*时“浅灰色”将被视为两项?我在哪里可以找到这些细节的文件?man sh?基本上这是一个历史缺陷,Bourne shell中的$*
在所有情况下都不能正常工作,因此必须发明“$@”
。还要注意的是,Bourne shell/POSIX shell没有数组。但项目列表中项目的;do
construct当然在所有shell中都受支持。还请注意,可以方便地使用globbing在一组文件上循环for file in a*.dat
通过扩展通配符来构建令牌列表(尽管遗憾的是,许多用户通过对file in$(ls a*.dat))执行类似于的操作来破坏它)。@是什么意思?它是一个特殊的索引,导致扩展生成数组的所有元素,不仅仅是一个特定的元素。我不明白为什么“${array[@]}”中的I是代码>打印3行。由于echo${array[@]}
只打印一行item 1 item 2 item 3
,我希望“${array[@]}”中的I的代码>在中转换为“第1项第2项第3项”中的i代码>;因此,它将导致一行项目1项目2项目3
。我错过了什么?提前感谢“${array[*]}”
将扩展到“项目1项目2项目3”
<代码>“${array[@]}”
扩展为“项目1”“项目2”“项目3”
;它将每个元素视为单独的带引号的单词,而不是包含每个元素的单个带引号的单词。array仅在bash shell中工作。有没有办法在KSH实现同样的目标?