Bash 如何使用echo输出shell命令

Bash 如何使用echo输出shell命令,bash,shell,Bash,Shell,我正在尝试格式化一个shell out str="set @face_date = '20130612' 以下代码将输出返回为“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'); 提前谢谢你的帮助也许你

我正在尝试格式化一个shell out

str="set @face_date = '20130612' 
以下代码将输出返回为“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');

提前谢谢你的帮助

也许你能帮上忙。您需要将命令包含在`(ASCII#96)中才能执行。不过,这个问题可能更合适。

您需要对内部双引号进行转义,或者在
$()
或``中进行包围:

echo "face_date:=TO_DATE($("$str | cut -d '=' -f2")),'YYYY/MM/DD');"
或者干脆扔掉所有的
管道
切割
,只需执行以下操作:

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

echo "face_date:=TO_DATE($(cut -d '=' -f2 <<< "$str")),'YYYY/MM/DD');"
还有一个办法

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');

您将双引号嵌套在其他双引号中。尝试用反斜杠转义。或者尝试在反引号中嵌入
echo
。但不确定新行是如何处理的。除此之外,这应该是可行的。像
echo“face_date:=TO_date(`echo$str | cut-d'='-f2`'),'YYYY/MM/DD');“
免责声明:我没有尝试过,也很少使用Unix land Shell。
face_date:=TO_DATE('2013-06-12','YYYY/MM/DD');