2014-06-25 71 views
0

我試圖格式化掏出如何輸出使用echo

str="set @face_date = '20130612' 

下面的代碼返回了爲「20130612」

echo $str | cut -d '=' -f2 

一個shell命令,但下面的代碼無法正常工作

echo "face_date:=TO_DATE("$str | cut -d '=' -f2"),'YYYY/MM/DD');" 

預期結果:

face_date:= to_date('2013-06-12','YYYY/MM/DD'); 

在此先感謝您的幫助

+0

你嵌套內的其他雙引號雙引號。嘗試用反斜槓逃脫它們。 –

+0

也許嘗試在反引用中嵌入一個'echo'。不知道如何處理新行。除了那應該工作。如'echo「face_date:= TO_DATE(」\'echo $ str | cut -d'='-f2 \'「),'YYYY/MM/DD');」'免責聲明:沒有試過,我很少使用Unix-land shell。 –

回答

0

另一種方式,

echo "face_date:=TO_DATE($(echo $str | cut -d '=' -f2)),'YYYY/MM/DD');" 

這將產生以下輸出。

face_date:=TO_DATE('20130612'),'YYYY/MM/DD'); 

,或者您可以使用

str1=$(echo $str | cut -d '=' -f2) 
echo "face_date:=TO_DATE($(echo ${str1:0:6}-${str1:6:2}-${str1:8:3}),'YYYY/MM/DD');" 

爲以下輸出

face_date:=TO_DATE('2013-06-12','YYYY/MM/DD'); 
0

也許that可以幫助你。您需要在`(ASCII#96)中包含您的命令才能執行。雖然這個問題也許更適合here

0

您需要可以逃脫內雙引號,或$()圍繞或``:

echo "face_date:=TO_DATE($("$str | cut -d '=' -f2")),'YYYY/MM/DD');" 

或者乾脆甩掉所有pipescut,只是做:

echo "face_date:=TO_DATE(${str##* }),'YYYY/MM/DD');" 
1

您可以使用:

echo "face_date:=TO_DATE($(cut -d '=' -f2 <<< "$str")),'YYYY/MM/DD');" 

OUTPUT:

face_date:=TO_DATE('20130612'),'YYYY/MM/DD');