arrays - 空格在 UNIX 数组中被视为分隔符

标签 arrays linux shell unix

我有一段代码,其中有一个由/分隔的字符串。

代码的最后一个元素是值“Cars & bikes” 但是代码将空格视为分隔符,我得到了错误的输出。

ARG="s3://this-is-my-bucket/Load/Data/Cars & Bikes"
ARR=(${ARG//// })
S3=${ARR[0]}
AWS=${ARR[1]}
TYPE=${ARR[2]}
FIELD=${ARR[3]}
ITEM=${ARR[4]}
echo $S3
S3:
echo $AWS
this-is-my-bucket
echo $TYPE
Load 
echo $FIELD
Data
echo $ITEM
Cars

我希望 o/p 是这样的:

回显$ITEM

汽车和自行车

如有任何建议,我们将不胜感激。

最佳答案

您可以将 read -a/ 一起用作 IFS:

s="s3://this-is-my-bucket/Load/Data/Cars & Bikes"
IFS=/ read -ra arr <<< "$s" && declare -p arr

declare -a arr=([0]="s3:" [1]="" [2]="this-is-my-bucket" [3]="Load" [4]="Data" [5]="Cars & Bikes")

否则,您可以避免创建数组,直接使用 IFS=/read 中使用变量,如下所示:

IFS=/ read -r s3 _ aws type field item <<< "$s" && declare -p s3 aws type field item
declare -- s3="s3:"
declare -- aws="this-is-my-bucket"
declare -- type="Load"
declare -- field="Data"
declare -- item="Cars & Bikes"

关于arrays - 空格在 UNIX 数组中被视为分隔符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45593329/

相关文章:

arrays - 可以只复制数组的值吗?

linux - 无法在 ubuntu 上安装 Angular Cli

java - 将 Lua shell 嵌入到 Java 应用程序中 (LuaJava)

bash - 检查命令是否成功使 shell 脚本很长

linux - 遍历文件夹和子文件夹中的文件名

多维javascript数组中的Javascript For循环

c++ - 用分配的最后一个值覆盖数组?

C语言编程

linux - 在 linux 下使用带有 pthreads 的 glGetString() 的段错误

linux - 获取处理器频率