2014-07-22 52 views
0

摸索出如下一個簡單的shell腳本:爲什麼這條線外殼的的eval(工作),但獲得未能在bash

#!/bin/sh 
SHOWIT="echo \"a b c\"" 
GETIT="cut -f 3 -d' '" 
echo "$SHOWIT|$GETIT" 
eval "$SHOWIT|$GETIT" 
$SHOWIT|$GETIT 

表達「$ SHOWIT | $ GETIT」通過EVAL工作,但命中誤差當直接將它放到Shell命令時。

echo "a b c"|cut -f 3 -d' ' 
c 
cut: ': No such file or directory <== Hit error at here 

順便說一下,我的默認shell是RHEL6.3上的BASH 4.1.2。

#bash --version 
GNU bash, version 4.1.2(1)-release (x86_64-redhat-linux-gnu) 

任何人都可以幫助找到錯誤的根本原因?非常感謝。

回答

1

因爲與EVAL您的命令變成這樣:

echo "a b c" | cut -f 3 -d' ' 

但隨着分詞而已,你的命令僅是這樣的:

echo "\"a" "b" "c\"" | cut "-f" "3" "-d'" "'" 

變量沒有得到雙解析即它只會得到一次分詞並且其內部的引號被忽略。

相關問題