2010-11-02 222 views
13

我需要檢查變量是否具有以指定子字符串開頭的字符串值。KSH檢查字符串是否以子字符串開頭

在Python這將是這樣的:

foo = 'abcdef' 
if foo.startswith('abc'): 
    print 'Success' 

什麼是KSH檢查是否STRIG $foo開始與子bar最明確的方法是什麼?

回答

23

這很簡單,但看起來有點奇怪:

if [[ "$foo" == abc* ]]; then ... 

人們會認爲KSH將擴大在當前目錄下的文件的模式,而是,它的模式匹配。不過,您需要[[。單[將無法​​正常工作。如果foo中沒有空格,則引號不是必需的。

+0

在雙括號內,即使'$ foo'爲空或未設置,也不需要引號。 – 2010-11-02 18:32:24

+0

該解決方案看起來完全像我一直在尋找的東西。但不幸的是,它不起作用在我的ksh。它看起來像ksh88,我猜這些技巧太老了。 – z4y4ts 2010-11-03 09:30:51

+0

如果'$ foo'中包含「=」,該怎麼辦? – user443854 2013-01-18 16:40:35

6

你也可以做正則表達式匹配:

if [[ $foo =~ ^abc ]] 

對於更爲複雜的模式,我建議使用一個變量,而不是直接把圖案測試:

bar='^begin (abc|def|ghi)[^ ]* end$' 
if [[ $foo =~ $bar ]] 
17

另外:

foo='abcdef' 
pattern='abc*' 

case "$foo" in 
    $pattern) echo startswith ;; 
    *) echo otherwise ;; 
esac 
+0

適用於便攜式解決方案 – 2010-11-03 06:56:03

+1

您當然不需要臨時變量。 'abc'*中的$ foo)echo yes ;; esac' – tripleee 2013-08-08 07:59:00

+1

便攜式返回solaris 9/bin/sh和@dieeee的簡化以上作品 – lamont 2013-10-15 23:48:29

相關問題