我有一段代码,其中我有一个由/。
分隔的字符串代码的最后一个元素是“汽车与自行车”的值 但是代码将空格视为分隔符,输出错误。
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是什么:
echo $ ITEM
汽车与汽车自行车
任何建议都表示赞赏。
答案 0 :(得分:2)
您可以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")
否则你可以避免数组创建并直接在read
中使用IFS=/
使用变量:
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"
答案 1 :(得分:-1)
设置IFS
以将字间隔符从空格更改为/
。当你不想要分词时,将变量放在双引号中。
ARG="s3://this-is-my-bucket/Load/Data/Cars & Bikes"
IFS=/
ARR=($ARG)
S3=${ARR[0]}
AWS=${ARR[2]}
TYPE=${ARR[3]}
FIELD=${ARR[4]}
ITEM=${ARR[5]}
echo "$S3"
echo "$AWS"
echo "$TYPE"
echo "$FIELD"
echo "$ITEM"
请注意,由于//
之后有两个s3:
,因此您需要在数组索引中添加1以获取以下字段。当IFS
包含标准空白字符时,IFS
个字符的多个序列仅被视为单个分隔符。