我试图使用函数列出字段1的内容:
help(){
if [[ $# -eq 0 ]] ; then
echo '######################################'
echo ''
echo 'Argument to run run name must be given: ./report.sh Name'
echo 'Report names are:'
ALLNAMES=$(cut -d '|' -f 1 $CONFIGFILE | awk '{printf $0"\n"}')
echo $ALLNAMES
echo '######################################'
exit 0
fi
}
我得到的输出是:
$ bin/report.sh
######################################
Argument to run run name must be given: ./report.sh Name
Report names are:
ItemA ItemB
######################################
我想要:
$ bin/report.sh
######################################
Argument to run run name must be given: ./report.sh Name
Report names are:
ItemA
ItemB
######################################
如果我运行cut命令,我得到:
[david@kallibu]$ cut -d '|' -f 1 conf/report.conf
ItemA
ItemB
我需要更改以获取换行符吗?
答案 0 :(得分:2)
问题是:
echo $ALLNAMES
应该用引号解决:
echo "$ALLNAMES"
答案 1 :(得分:2)
如果您不想在其他地方使用var ALLNAMES ,只需:
help(){
if [[ $# -eq 0 ]] ; then
echo '######################################'
echo ''
echo 'Argument to run run name must be given: ./report.sh Name'
echo 'Report names are:'
cut -d '|' -f 1 conf/report.conf
echo '######################################'
exit 0
fi
}
答案 2 :(得分:1)
您的代码将是,
help(){
if [[ $# -eq 0 ]] ; then
echo '######################################'
echo ''
echo 'Argument to run run name must be given: ./report.sh Name'
echo 'Report names are:'
ALLNAMES=$(awk -F'|' '{print $1}' $CONFIGFILE)
echo "$ALLNAMES"
echo '######################################'
exit 0
fi
}
您可以尝试使用此awk -F'|' '{print $1}' $CONFIGFILE
命令获取第一列的值,其中|
为分隔符。
您需要将ALLNAMES
置于双引号内。只有这样,ALLNAMES
变量才得以扩展。
答案 3 :(得分:0)
@Tiago为您的具体问题提供了答案,但总的来说,您的脚本应该是发布的shell脚本@klashxx或者这个awk脚本:
help(){
if [[ $# -eq 0 ]] ; then
awk '
BEGIN {
FS = "|"
print "######################################\n"
print "Argument to run run name must be given: ./report.sh Name"
print "Report names are:"
}
{ print $1 }
END {
print "######################################"
}
' "$CONFIGFILE"
exit 0
fi
}
或类似。