数组 – Bash – 将数组分隔为字符串
发布时间:2020-12-15 18:49:54 所属栏目:安全 来源:网络整理
导读:我想知道以下内容: 为什么给出的非工作示例不起作用 如果在工作实例中给出的方法比其他清洁方法更好. 不工作的例子 ids=(1 2 3 4);echo ${ids[*]// /|}1 2 3 4 ids=(1 2 3 4);echo ${${ids[*]}// /|}-bash: ${${ids[*]}// /|}: bad substitution ids=(1 2 3
我想知道以下内容:
为什么给出的非工作示例不起作用 不工作的例子 > ids=(1 2 3 4);echo ${ids[*]// /|} 1 2 3 4 > ids=(1 2 3 4);echo ${${ids[*]}// /|} -bash: ${${ids[*]}// /|}: bad substitution > ids=(1 2 3 4);echo ${"${ids[*]}"// /|} -bash: ${"${ids[*]}"// /|}: bad substitution 工作实例 > ids=(1 2 3 4);id="${ids[@]}";echo ${id// /|} 1|2|3|4 > ids=(1 2 3 4); lst=$( IFS='|'; echo "${ids[*]}" ); echo $lst 1|2|3|4 在上下文中,要在sed命令中使用的分隔字符串进行进一步解析. # REVISION: 2017-03-14 # Use of read and other bash specific features (bashisms) 因为括号用于分隔数组,而不是字符串: ids="1 2 3 4";echo ${ids// /|} 1|2|3|4 一些示例:使用两个字符串填充$ids:a b和c d ids=("a b" "c d") echo ${ids[*]// /|} a|b c|d IFS='|';echo "${ids[*]}";IFS=$' tn' a b|c d …最后: IFS='|';echo "${ids[*]// /|}";IFS=$' tn' a|b|c|d 阵列组合在一起,由IFS的第1个字符分隔,而空格替换为|在数组的每个元素中. 当你做: id="${ids[@]}" 您将字符串构建从将空间的数组ids合并到类型为string的新变量中. 注意:当“${ids [@]}”给出一个空格分隔的字符串时,“${ids [*]}”(带有星号*而不是at符号@)将渲染由第一个字符$IFS. 什么人bash说: man -Len -Pcol -b bash | sed -ne '/^ *IFS /{N;N;p;q}' IFS The Internal Field Separator that is used for word splitting after expansion and to split lines into words with the read builtin command. The default value is ``<space><tab><newline>''. 玩$IFS: set | grep ^IFS= IFS=$' tn' declare -p IFS declare -- IFS=" " printf "%qn" "$IFS" $' tn' 字面上一个空格,一个列表和(含义或)一个换行符.所以,第一个字符是一个空格. *的使用将与@一样. 但: { # OIFS="$IFS" # IFS=$': tn' # unset array # declare -a array=($(echo root:x:0:0:root:/root:/bin/bash)) IFS=: read -a array < <(echo root:x:0:0:root:/root:/bin/bash) echo 1 "${array[@]}" echo 2 "${array[*]}" OIFS="$IFS" IFS=: echo 3 "${array[@]}" echo 4 "${array[*]}" IFS="$OIFS" } 1 root x 0 0 root /root /bin/bash 2 root x 0 0 root /root /bin/bash 3 root x 0 0 root /root /bin/bash 4 root:x:0:0:root:/root:/bin/bash 注意:IFS =:read -a数组< <(...)将使用:作为分隔符,而不会永久设置$IFS.这是因为输出行#2显示空格作为分隔符. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |