Shell脚本 - 将字符串拆分为数组时检查长度

eLR*_*uLL 5 linux bash shell

我正在使用bash脚本,我试图在内部拆分一个带有url的字符串,例如:

str=firsturl.com/123416 secondurl.com/634214
Run Code Online (Sandbox Code Playgroud)

所以这些URL是用空格分隔的,我已经使用IFS命令来拆分字符串,它工作得很好,我可以通过以下两个URL迭代:

for url in $str; do
    #some stuff
done
Run Code Online (Sandbox Code Playgroud)

但我的问题是我需要得到这个拆分有多少项,所以对于str示例它应该返回2,但使用这个:

${#str[@]}
Run Code Online (Sandbox Code Playgroud)

返回字符串的长度(40对于当前示例),我的意思是我需要获取的字符数2.

使用计数器进行迭代也不起作用,因为在迭代数组之前我需要元素的数量.

有什么建议?

Die*_*ano 5

你应该使用这样的东西

declare -a a=( $str )
n=${#a[*]} # number of elements
Run Code Online (Sandbox Code Playgroud)


tha*_*guy 5

将字符串拆分为数组并使用它:

str="firsturl.com/123416 secondurl.com/634214"
array=( $str )

echo "Number of elements: ${#array[@]}"
for item in "${array[@]}"
do
  echo "$item"
done
Run Code Online (Sandbox Code Playgroud)

但是,您永远不应该有空格分隔的字符串列表.如果您从其他命令逐行获取它们,则可以使用while read循环:

while IFS='' read -r url
do
  array+=( "$url" )
done
Run Code Online (Sandbox Code Playgroud)

对于正确编码的URL,这可能不会有太大的区别,但一般来说,这将阻止glob扩展和一些空白问题,并且它是其他命令(如wget -i)使用的规范格式.