我正在尝试格式化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');
提前感谢您的帮助
答案 0 :(得分:1)
您可以使用:
echo "face_date:=TO_DATE($(cut -d '=' -f2 <<< "$str")),'YYYY/MM/DD');"
<强>输出:强>
face_date:=TO_DATE( '20130612'),'YYYY/MM/DD');
答案 1 :(得分:0)
答案 2 :(得分:0)
你需要转义内部双引号,或者在$()
或``:
echo "face_date:=TO_DATE($("$str | cut -d '=' -f2")),'YYYY/MM/DD');"
或简单地删除所有pipes
和cut
,只需执行:
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');