Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
获取\n而不是shell脚本中echo-e命令中的n_Shell_Command_Echo - Fatal编程技术网

获取\n而不是shell脚本中echo-e命令中的n

获取\n而不是shell脚本中echo-e命令中的n,shell,command,echo,Shell,Command,Echo,我正在尝试获取echo-e命令的输出,如下所示 使用的命令: echo -e "cd \${2}\nfilesModifiedBetweenDates=\$(find . -type f -exec ls -l --time-style=full-iso {} \; | awk '{print \$6,\$NF}' | awk '{gsub(/-/,\"\",\$1);print}' | awk '\$1>= '$fromDate' && \$1<= '$toDate

我正在尝试获取echo-e命令的输出,如下所示

使用的命令:

echo -e "cd \${2}\nfilesModifiedBetweenDates=\$(find . -type f -exec ls -l --time-style=full-iso {} \; | awk '{print \$6,\$NF}' | awk '{gsub(/-/,\"\",\$1);print}' | awk '\$1>= '$fromDate' && \$1<= '$toDate' {print \$2}' | tr \""\n"\" \""\;"\")\nIFS="\;" read -ra fileModifiedArray <<< "\$filesModifiedBetweenDates"\nfor fileModified in \${fileModifiedArray[@]}\ndo\n egrep -w "\$1" "\$fileModified" \ndone"

echo-e“cd\${2}\nFilesModifiedBetween Dates=\$(find.-type f-exec ls-l--time style=full iso{}\\\;awk'{print\$6,\$NF}'{124; awk'{gsub(/-/,\“\”,\”,\$1);print}''fromDate'&$1='20140806'&$1='20140806'&$1您最好使用
printf更好的控制:

$ printf "tr %s %s\n" '"\n"' '";"'
tr "\n" ";"
如您所见,我们在双引号中指示参数:
printf“text%s%s”
,然后定义应在该参数中存储哪些内容

如果您真的必须使用
echo
,请退出
\

$ echo -e 'tr "\\n" ";"'
tr "\n" ";"

有趣的阅读:

对于长文本块,使用此处引用的文档比尝试将多行字符串嵌入到
echo
printf
的单个参数中要简单得多

cat <<"EOF"
cd ${2}

filesModifiedBetweenDates=$(find . -type f -exec ls -l --time-style=full-iso {} \; | awk '{print $6,$NF}' | awk '{gsub(/-/,"",$1);print}' | awk '$1>= '20140806' && $1<= '20140915' {print $2}' | tr "\n" ";")

IFS=; read -ra fileModifiedArray <<< $filesModifiedBetweenDates

for fileModified in ${fileModifiedArray[@]}

do

egrep -w $1 $fileModified 

done
EOF

cat我们不能在echo-e中处理这个问题,因为我需要用一些脚本来实现它,而且我一直停留在这一点上。你能根据你在回答中显示的内容向我建议解决方案吗(请移到问题处),您有一个更广泛的问题。请指出它的整个范围,因为显然您正在使用大量管道和AWK以及许多东西…我们可以尝试找到一个更简单的解决方案。我刚刚更新了问题,请立即建议我,这里没有实际需要使用
%s
printf'tr\\n”“;“\n'
printf
优于
echo-e
的主要原因是它是可移植的,而不是它可以简单地处理转义字符。
$ echo -e 'tr "\\n" ";"'
tr "\n" ";"
cat <<"EOF"
cd ${2}

filesModifiedBetweenDates=$(find . -type f -exec ls -l --time-style=full-iso {} \; | awk '{print $6,$NF}' | awk '{gsub(/-/,"",$1);print}' | awk '$1>= '20140806' && $1<= '20140915' {print $2}' | tr "\n" ";")

IFS=; read -ra fileModifiedArray <<< $filesModifiedBetweenDates

for fileModified in ${fileModifiedArray[@]}

do

egrep -w $1 $fileModified 

done
EOF