如何使用echo输出shell命令

时间:2014-06-25 21:37:36

标签: bash shell

我正在尝试格式化shell

str="set @face_date = '20130612' 

以下代码将out返回为' 20130612'

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

但以下代码无效

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

预期结果:

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

提前感谢您的帮助

4 个答案:

答案 0 :(得分:1)

您可以使用:

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

<强>输出:

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

答案 1 :(得分:0)

也许that可以帮到你。您需要在`(ASCII#96)中包含您的命令才能执行。也许这个问题更适合here

答案 2 :(得分:0)

你需要转义内部双引号,或者在$()或``:

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

或简单地删除所有pipescut,只需执行:

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

答案 3 :(得分: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');