bash脚本构建包含“ \ n”的查找命令

我在一个包含\ n

的bash脚本中遇到问题并发出构建查找命令的问题

这是我要构建的命令

 find ./201911 -printf "%f\n">201911filelist.txt

当我在命令行上测试时,一切看起来还不错,但是当我将其放在脚本中时,回显会将\ n视为新行。我已经尝试过转义,但没有用

# echo "find ./$dir -printf \"%f""\n"\"">${dir}filelist.txt"""
find ./201911 -printf "%f\n">201911filelist.txt

在我的脚本中,它看起来像这样

 echo "find ./$dir -printf \"%f""\n"\"">${dir}filelist.txt""" >> create_script_$dir.sh

文件中的结果是这样的:

find ./201909 -printf "%f
">201909filelist.txt

如果也尝试过

  /bin/echo -e "find ./$dir -printf \""%f\\" "n\""> ${dir}201911filelist.txt"

以下结果,但我需要摆脱空间:

find ./201911 -printf "%f\ n"> 201911201911filelist.txt

我在这里丢失了一些东西,但是我真的很接近...

limian6666 回答:bash脚本构建包含“ \ n”的查找命令

首先-bash中的代码生成仅适用于专家,并且存在严重的安全风险。考虑寻找其他方式来满足您的需求。

话虽如此,以下行为符合预期:

#!/usr/bin/env bash

checkShellCompat() {
  [ -n "$BASH_VERSION" ] && return
  echo "ERROR: Must run this script with bash,not sh" >&2
  exit 1
}

buildFindCmds() {
  # generate a correct shebang,and run the shell compatibility check
  printf '%s\n' '#!/usr/bin/env bash' "$(declare -f checkShellCompat)" checkShellCompat
  # ...then,for each directory,generate a find command with a correct redirection
  for dir; do
    printf '%q ' find "./$dir" -printf '%f\n'
    printf '>%q\n' "${dir}filelist.txt"
  done
}
buildFindCmds 201911 201912
,

如果要记录特定命令,可以使用bash'set -x','set + x'。

set -x
 find ./201911 -printf "%f\n">201911filelist.txt
 .. additional command
set +x

或将其包装到函数中

function log_and_run {
   echo "$1" >&2
   eval "$1"
}

log_and_run 'find ./201911 -printf "%f\n">201911filelist.txt'

根据评论,重要的是要强调指出,由于与评估的各种扩展相关联的潜在风险,不应将此log_and_run用作通用日志记录框架-请参阅下面的评论。

本文链接:https://www.f2er.com/3136357.html

大家都在问