在shell脚本中以循环方式在一行中打印变量输出

时间:2018-04-07 06:55:45

标签: shell

我有一个字符串

  

mystring =" 01-MAY-11 12.07.38.199 PM:31-APR-13 12.07.38.199 PM:   31-JUN-14 12.07.38.199 PM:"

我正在将字符串迭代为

IFS=:
for item in $mystring
do
echo    "expdp  query"  "$item"
done

我的输出是:

  

expdp查询01-MAY-11 12.07.38.199 PM

     

expdp查询

     

31-APR-13 12.07.38.199 PM

     

expdp查询

     

31-JUN-14 12.07.38.199 PM

但是我希望得到如下所示的输出

  

expdp查询01-MAY-11 12.07.38.199 PM

     

expdp查询31-APR-13 12.07.38.199 PM

     

expdp查询31-JUN-14 12.07.38.199 PM

请建议在for循环中迭代时我必须提供哪些参数

2 个答案:

答案 0 :(得分:0)

file.sh:

mystring="01-MAY-11 12.07.38.199 PM: 31-APR-13 12.07.38.199 PM: 31-JUN-14 12.07.38.199 PM:"
IFS=:
first=1
for item in $mystring
do
if [[ $first == 1 ]]; then
    echo "expdp query" " $item"
    first=0
else
    echo "expdp query" "$item"
fi
done

./ test.sh:

expdp query  01-MAY-11 12.07.38.199 PM
expdp query  31-APR-13 12.07.38.199 PM
expdp query  31-JUN-14 12.07.38.199 PM

答案 1 :(得分:0)

您可以通过故意省略引用来添加GenericAvroSerde以消除字符串中的换行符。

但是现在我们知道了换行符的来源,使用mystring=$( echo ${mystring} )似乎是更好的选择。

while read

您可以从查询中删除sqlplus ...... | while read -r item ; do echo "expdp query" "$item" done

如果您需要的时间超过:,请尽量避免使用Bash Pitfall #8(或更长的说明BashFAQ#24