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

标签 linux bash shell

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

str=firsturl.com/123416 secondurl.com/634214

因此这些 URL 由空格分隔,我已经使用 IFS 命令拆分字符串并且效果很好,我可以通过以下方式遍历这两个 URL:

for url in $str; do
    #some stuff
done

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

${#str[@]}

返回字符串的长度(当前示例为40),我的意思是字符数,当我需要得到2时。

用计数器迭代也行不通,因为在迭代数组之前我需要元素的数量。

有什么建议吗?

最佳答案

将字符串拆分成一个数组并使用它:

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

echo "Number of elements: ${#array[@]}"
for item in "${array[@]}"
do
  echo "$item"
done

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

while IFS='' read -r url
do
  array+=( "$url" )
done

对于正确编码的 URL,这可能不会有太大的不同,但一般来说,这将防止 glob 扩展和一些空白问题,并且它是其他命令(如 wget -i) 一起工作。

关于linux - Shell脚本-将字符串拆分为数组时检查长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17356831/

相关文章:

json - jq 选择在嵌套 json bash 中具有特定值的对象

bash - GNU Parallel 与多个变量

linux - 计时器检查文件末尾 bash shell

linux - 验证 IP 是否存在于文件中

linux - 如何杀死僵尸进程

linux - 使用du -sh *命令时如何根据子目录的大小排序?

linux - 有什么方法可以阻止后台输出在 Linux 终端中分解输入?

用于搜索整个系统文件的java代码,在windows上工作正常但在linux ubuntu中无限

php - 无法让 php 在 ubuntu 上运行

c# - Linux/Mono 上的 YSOD 故障排除