我有一个看起来像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
Run Code Online (Sandbox Code Playgroud)
我是shell脚本的新手,所以我可能错过了一些东西.
Fat*_*ror 13
使用bash
你可以使用这样的数组:
#!/bin/bash
VARIABLE=1234-123-456-890
PART=(${VARIABLE//-/ })
echo ${PART[0]}-${PART[1]}-${PART[2]}-${PART[3]}
Run Code Online (Sandbox Code Playgroud)
该${VARIABLE//-/ }
扩张改变了这一切-为空格,然后它拆分单词边界到一个数组.
或者,您可以使用read
:
#!/bin/bash
VARIABLE=1234-123-456-890
read PART1 PART2 PART3 PART4 <<< "${VARIABLE//-/ }"
echo $PART1-$PART2-$PART3-$PART4
Run Code Online (Sandbox Code Playgroud)
要使其工作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
Run Code Online (Sandbox Code Playgroud)
警告:这只是在bash
运行sh
模式下测试的.
/bin/sh
是破折号(参见“参数扩展”部分)
#!/bin/sh
# assume VARIABLE equals 1234-123-456-890
VARIABLE="$1"
PART4="$VARIABLE" # PART4 is 1234-123-456-890
PART1="${PART4%%-*}" # PART1 is 1234
PART4="${PART4#*-}" # PART4 is 123-456-890
PART2="${PART4%%-*}" # PART2 is 123
PART4="${PART4#*-}" # PART4 is 456-890
PART3="${PART4%%-*}" # PART3 is 456
# PART4 is 456-890
PART4="${PART4#*-}" # PART4 is 890
echo "$PART1-$PART2-$PART3-$PART4"
Run Code Online (Sandbox Code Playgroud)
测试 $PART1-$PART2-$PART3-$PART4
$ ./test.sh 1234-123-456-890
1234-123-456-890
$ ./test.sh 1234-abc-789-ABCD
1234-abc-789-ABCD
Run Code Online (Sandbox Code Playgroud)