2014-03-03 134 views
0

我一直試圖在開始和結束時截斷一個文件名。 我可以用下面的代碼實現這一點:
bash中的嵌套命令

#!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}:壞替代

是否有人可以指出的錯誤線?

感謝,

+4

錯誤在於bash不支持嵌套替換。 –

+0

感謝您的回覆! 有沒有一種方法可以完成我想用單行命令做的事情? – KPMG

+0

你可以使用zsh! – Ryan

回答

0

如果你可以使用GNU的grep爲什麼不低於使用:

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

或者使用sed:

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

有(至少)兩種方式來實現這一點在bash,至少對於你特別引用的例子。首先刪除不是數字的所有字符:

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

二是通過請求特定的子,你已經部分使用:

echo "${FILENAME:5:3}" 

哪,如果這些是最有用的,你要看您的實際使用案例與您引用的示例相比如何...