bash中的嵌套命令

时间:2014-03-03 19:34:43

标签: bash command nested

我一直试图在开始和结束时截断文件名。 我可以使用以下代码实现此目的:

#!bin/bash

FILENAME="hello123.txt"
NAME=${FILENAME%.t*}
NUMBER=${NAME:5}

DOESNTWORK=${${FILENAME%.t*}:5}

echo "$FILENAME"
echo "$NAME"
echo "$NUMBER"
echo "$DOESNTWORK"

我的问题在于 DOESNTWORK 行 我收到此错误: main.sh:第7行:$ {“$ {FILENAME%。t *}”:5}:错误替换

有人可以指出错误吗?

谢谢,

2 个答案:

答案 0 :(得分:0)

如果你可以使用GNU grep,为什么不在下面使用:

DOESNTWORK=$(grep -o -E '[[:digit:]]+' <<< "$FILENAME")

或者使用sed:

DOESNTWORK=$(sed 's/[^0-9]*//g' <<< "$FILENAME")

答案 1 :(得分:0)

至少有两种方法可以在bash中完成此任务,至少对于您特别引用的示例。第一个删除所有不是数字的字符:

echo "${FILENAME//[^0-9]/}"

第二种方法是请求您已经部分使用的特定子字符串:

echo "${FILENAME:5:3}"

如果这些对您最有用,取决于您的实际用例与您引用的示例的比较...