Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 在UNIX数组中被视为分隔符的空间_Arrays_Linux_Shell_Unix - Fatal编程技术网

Arrays 在UNIX数组中被视为分隔符的空间

Arrays 在UNIX数组中被视为分隔符的空间,arrays,linux,shell,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-

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

代码的最后一个元素是值“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是什么样的

echo$项目

汽车和自行车


感谢您的任何建议。

您可以将
阅读-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-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
将单词分隔符从空白更改为
/
。当你不想分词的时候,把变量放在双引号里

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
字符的多个序列仅被视为单个分隔符


顺便说一句,您应该避免使用大写变量名。这些用于环境变量。

设置
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
字符的多个序列仅被视为单个分隔符



顺便说一句,您应该避免使用大写变量名。这些用于环境变量。

使用代码标记,而不是引号引用您的变量以防止分词。请参阅以获取正确信息answer@Theforgotten-这不是正确答案。使用代码标记,不引用引用您的变量以防止分词。请参阅以获取正确答案answer@Theforgotten-这不是正确的答案。@Barmer-注意,s3后面有2//:。所以,如果s=/不能解决isse问题。@ParijatBose很好,我已经为此调整了索引。@Barmer-注意,s3之后有2//:。所以,如果s=/不能解决isse问题。@ParijatBose捕捉得好,我已经为此调整了索引。谢谢@anubhava。使用IFS会导致回归问题。在我/你提到的代码之后还有更多的代码行。顺便说一句,unix路径中有“/”。因此,将IFS设置为/也将unix路径视为分隔符。在IFS=/使用完毕后,您能否帮助我了解如何停止/取消激活它。将
IFS=/
read
放在同一行中不会设置全局
IFS
变量。如果您出于某种原因设置了全局
IFS
,则使用
unset IFS
将其重置。这与shell脚本无关。这是bash,不是sh。对不起,我不明白。谢谢@anubhava。使用IFS会导致回归问题。在我/你提到的代码之后还有更多的代码行。顺便说一句,unix路径中有“/”。因此,将IFS设置为/也将unix路径视为分隔符。在IFS=/使用完毕后,您能否帮助我了解如何停止/取消激活它。将
IFS=/
read
放在同一行中不会设置全局
IFS
变量。如果您出于某种原因设置了全局
IFS
,则使用
unset IFS
将其重置。这与shell脚本无关。这是bash,不是sh。对不起,我不明白