我有来自用户的字符串...... 1,2,3具有任意数量的数字.我想要做的是将数字替换为数组中每个数字的indeces处的相应值.所以说我的阵列有[tom] [jerry] [sue].当我正在处理时,我希望我的字符串看起来像汤姆,杰瑞,起诉.我应该使用grep吗?庆典?
string="1,2,3"
names=( nobody tom jerry sue )
indexes=( $(sed 's/,/ /g' <<< "$string") )
result=""
pad=""
for i in ${indexes[@]}
do
result="$result$pad${names[$i]}"
pad=","
done
echo "$result"
Run Code Online (Sandbox Code Playgroud)
说明:
sed用空格替换逗号从字符串生成的数字数组.还有其他方法可以做到这一点,但我倾向于使用sed静止.例如,indexes=( ${string//,/ }无需调用sed或任何外部程序即可完成工作.result.pad用来建立带分隔符的字符串.indexes$i.我没有计算'做'或'做'线.
我应该更具体,并问你
sed语法是如何工作的.
该行有4个有趣的部分:
indexes=( $(sed 's/,/ /g' <<< "$string") )
Run Code Online (Sandbox Code Playgroud)
indexes=( ... )
这是一个数组赋值.它将采用任何内容生成的单词,...并将它们视为数组的元素.names=( ... )当然,这就是作业的工作方式.
sed ... <<< "$string"
这将运行sed命令,其值为"$string"标准输入.这是一个bash名为Here String的扩展.因此,唯一的输入线是"1,2,3".
's/,/ /g'是一个sed命令,用于替换输入中每个逗号的空格.因此,输出是包含的行1 2 3.
$( ... )运行括号(sed命令)中包含的命令,并将输出视为字符串.
整体效果如下:
indexes=( 1 2 3 )
Run Code Online (Sandbox Code Playgroud)
括号周围的空格并不是绝对必要的,但我认为它们使得数组赋值更容易被发现 - 但它是一种我仍在"学习"(必须记住使用)的符号.