bash - 如何将部分变量提取到shell脚本中的另一个变量中

标签 bash shell sh

我有一个看起来像 xx-xx-xx-xx 的变量,其中每个 xx 都是一个数字(每个 xx 的长度未知)

我需要将这些数字提取到单独的变量中以便能够对其进行操作。 我试图查看正则表达式,但看不到任何解决方案(或者我只是太盲目而没有注意到。

理想的解决方案应该是这样的

#!/bin/sh
# assume VARIABLE equals 1234-123-456-890
VARIABLE=$1

# HERE SOME CODE assigning variables $PART1 $PART2 $PART3 $PART4

echo $PART1-$PART2-$PART3-$PART4
# Output will give us back 1234-123-456-890

我对 shell 脚本很陌生,所以我可能错过了一些东西。

最佳答案

使用 bash 你可以使用这样的数组:

#!/bin/bash
VARIABLE=1234-123-456-890

PART=(${VARIABLE//-/ })

echo ${PART[0]}-${PART[1]}-${PART[2]}-${PART[3]}

${VARIABLE//-/} 扩展将所有 - 更改为空格,然后在单词边界上将其拆分为一个数组。

或者,您可以使用read:

#!/bin/bash
VARIABLE=1234-123-456-890

read PART1 PART2 PART3 PART4 <<< "${VARIABLE//-/ }"
echo $PART1-$PART2-$PART3-$PART4

要使其在 sh 中工作,您可以稍微更改它并设置 IFS,即输入字段分隔符:

#!/bin/sh
VARIABLE=1234-123-456-890

old_ifs="$IFS"
IFS=-
read PART1 PART2 PART3 PART4 <<EOF
$VARIABLE
EOF

IFS="$old_ifs"
echo $PART1-$PART2-$PART3-$PART4

警告:这仅在 sh 模式下运行的 bash 上进行了测试。

关于bash - 如何将部分变量提取到shell脚本中的另一个变量中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9901199/

相关文章:

linux - ubuntu utf-8 转换器脚本

bash - 什么是 `Cd` 命令?

linux - 将数字转换为千兆字节(sed、awk、sh、bash)

bash - Dash shell 无法在没有双引号的情况下执行给定的命令

bash - Bash 中的临时输入重定向

bash - 如何将世界权限设置为与组权限相同?

linux - Bash 脚本变量解释

linux - 程序运行后的 UNIX 清除命令

c - 为什么 popen() 调用 shell 来执行进程?

arrays - 如何创建键 :array in shell? 的映射