POSIX Shell 反斜杠混淆

2024-04-13

我正在尝试创建一个具有简单功能的 shell 脚本,但似乎我无法理解如何正确处理反斜杠。 我的功能之一如下所示:

#!/bin/sh

func() {
    cmd="$*"
    printf "%s\n" "$cmd"
    echo -e $cmd
}
func '%{NAME}\\n'

这是正确的输出,因为我需要它:

%{NAME}\\n
%{NAME}\n

现在的问题是,我不能使用“echo -e”,因为这个脚本需要在 *nix 系统上运行,其中 echo 命令没有“-e”标志(例如 HPUX),这也是我的原因必须使用 sh 而不是 bash。因为我想让这个脚本尽可能可移植,所以我会避免使用 tr/sed 或(甚至更糟糕)脚本语言。

输入字符串的格式可以任意选择。我使用 %{NAME} 是有原因的,因为如果它只是常规字符,那么这样的东西就可以工作:

#!/bin/sh

func() {
    cmd="$*"
    printf "%s\n" "$cmd"
    printf $cmd
    echo
}
func 'NAME\\n'

不幸的是,这与“%”等字符不同:

%{NAME}\\n
func.sh: line 6: printf: `{': invalid format character

如何才能(希望)仅通过使用 printf 获得所需的结果,据我所知,这是最可移植的函数?


您可以使用%b in printf:

func() { cmd="$@"; printf "%s\n%b" "$cmd" "$cmd"; }

然后将其称为:

func '%{NAME}\n\n'

这将打印:



%{NAME}\n\n
%{NAME}

  
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

POSIX Shell 反斜杠混淆 的相关文章

  • shell 脚本无法将命令行输出保存到变量中

    我正在尝试执行 shell 命令 然后使用 shell 脚本将输出保存到变量中 所以我使用这样的反引号 out ls l print out 该代码工作正常 我可以将它用于任何其他 shell 命令 但是当我尝试执行 python vers
  • 如何替换每行中出现的所有字符串?

    我想在以下脚本中将所有出现的 用户名 替换为 但它仅替换第一次出现的情况 ls al sed s username 这就是 sed 默认情况下的工作方式吗 提前致谢 你需要g 全局 修饰符 sed s username g
  • 如何从 C 文件更改终端中的目录

    如何从 C 程序更改将在终端上生效的目录 实际上不要告诉 system 函数或 chdir 函数 这些仅适用于 C 中的进程或子 shell 假设我正在从 bash shell 执行一个 C 程序 其进程 ID 为 10223 那么 我可以
  • 如何“grep”连续流?

    可以用吗grep在连续的流中 我的意思是有点tail f
  • 在 Ubuntu 上纯粹通过 bash 脚本安装 mysql 5.7

    我想要一个无需任何手动输入即可安装 MySQL 5 7 实例的 bash 脚本 我正在关注数字海洋教程 https www digitalocean com community tutorials how to install mysql
  • 让 Emacs ansiterm 和 Zsh 更好地发挥作用

    我一直在尝试在 emacs 会话中使用 Zsh 而无需 emacs 重新映射所有 Zsh 键 我发现 ansi term 对此非常有效 但是我仍然遇到一些问题 我输出了很多垃圾字符 我可以用以下方法修复它 Setup proper term
  • ANSI 转义码在行尾有奇怪的行为

    重现步骤 考虑以下 shell 命令 echo e e 41mTest nTest2 e 0mTest3 它打印Test并在下一行中Test2具有红色背景 使用 ANSI 转义码 Test2后面直接是Test3这是无色的 行为 第一次执行此
  • 在powershell中检查文件是否可读且正常

    我是 powershell 新手 我想检查文件是否可读且正常 在 unix 中 我们可以使用 f 和 r 在一行中完成此操作 例如 以下 shell 脚本函数接受文件名作为参数并检查文件的可读性和规律性 与此等效的 powershell 是
  • 在 shell 脚本中连接命令字符串

    我正在维护一个现有的 shell 脚本 它将命令分配给 shell 脚本中的变量 例如 MY COMMAND bin command dosomething 然后接下来 它通过执行以下操作将 参数 传递给 MY COMMAND MY ARG
  • 如何将命令作为参数传递给 ssh [重复]

    这个问题在这里已经有答案了 我的需要是让这个命令起作用 sshpass p XXXX ssh oStrictHostKeyChecking no email protected cdn cgi l email protection sudo
  • 如何在 Xcode 4.2 中创建 Shell 脚本目标?

    我想知道是否有人知道 XCode 4 1 如何创建 shell 脚本 该选项不存在 但在最新版本中可能会被称为其他名称 塔 在导航器中选择您的项目 单击 添加目标 为空目标选择 聚合 添加构建阶段 gt 添加运行脚本 单击构建阶段并编辑运行
  • 如何通过 shell 脚本确定网页是否存在?

    我正在尝试制作一个程序 可以将一系列漫画扫描转换为一个 pdf 文件 并且我不想尝试下载图片来确定我是否有正确的网址 是否有一个 shell 脚本命令可以用来检查网页是否存在 在 NIX 下 您可以使用curl发出一个简单的HEAD要求 H
  • Bash 脚本大小限制?

    我有一个 bash 脚本 在 RHEL 或 OS X 上运行时出现以下错误 第 62484 行 意外标记 换行符 附近出现语法错误 第 62484 行 o gz 这是一个自动生成的脚本 用于解决我公司使用的 Grid Engine 计算集群
  • 如何将设备屏幕位置转换为发送事件位置?

    我知道关于input tap x yshell 命令 但是 我想了解如何 使用执行单击sendevent命令 我能够通过以下命令实现它 sendevent dev input event5 3 53 X sendevent dev inpu
  • shell_exec 的输出被截断为 100 个字符

    当在 shell 中运行以下命令时 curl F file filename http 192 168 0 1 产生以下输出 Accuracy 0 0 1 classification Accuracy 0 0 1 classificati
  • xsel -o 对于 OS X 等效项

    是否有一个等效的解决方案可以在 OS X 中抓取选定的文本 就像适用于 Linux 的 xsel o 一样 只需要当前的选择 这样我就可以在 shell 脚本中使用文本 干杯 埃里克 你也许可以安装xsel在 MacOS 上 更新 根据 A
  • awk: hping: 打印 icmp 发起/接收之间的差异

    我有以下输出hping http ports su net hping在 OpenBSD 上 hping icmp ts www openbsd org HPING www openbsd org re0 129 128 5 194 icm
  • 仅当重复行与模式匹配时才删除它们

    这个问题 https stackoverflow com questions 1444406 how can i delete duplicate lines in a file in unix有一个很好的答案说你可以使用awk seen
  • 有一种简单的方法可以忽略时间戳来区分日志文件吗?

    我需要比较两个日志文件 但忽略每行的时间戳部分 确切地说是前 12 个字符 有没有一个好的工具 或者一个聪明的 awk 命令 可以帮助我 根据您使用的 shell 您可以改变方法 Blair https stackoverflow com
  • 通过powershell运行ADB命令

    所以我尝试通过 powershell 脚本运行一些 ADB 命令 这是我正在尝试做的一个简单示例 adb shell echo in adb shell su root echo you are now root ls cd data da

随机推荐

  • 定义深度/维度未知的 C++ 模板

    我想写一个n维直方图类 它应该采用包含其他 bin 等的 bin 的形式 其中每个 bin 包含最小和最大范围 以及指向下一个维度 bin 的指针 bin 的定义如下 template
  • PivotCaches.add 错误 5 - 2003 到 2010 宏

    我有一个 Excel 2003 xls 文件 我试图在 Excel 2010 中运行该文件 我首先将该文件另存为 xlsm 并将该目录添加为信任中心中的受信任目录 我收到错误代码 如下箭头所示 注意 如果我将数据透视表版本更改为 12 它仍
  • 在 C++ 中将 char 或 string 转换为 bitset

    我正在做 DES 加密的作业 但我似乎无法将字符串转换 更不用说将字符转换为位集了 谁能告诉我如何在 C 中将单个字符转换为位集 下列 char c A std bitset lt 8 gt b c implicit cast to uns
  • 如何在 PHP 中实现后台/异步 write-behind 缓存?

    我有一个特定的 PHP 页面 由于各种原因 需要将 200 个字段保存到数据库中 这是 200 个单独的插入和 或更新语句 现在显而易见的事情就是减少这个数字 但是 就像我说的 由于我不想费心去讨论的原因 我不能这样做 我没想到会出现这个问
  • 在交叉过滤器中过滤多个离散值

    有没有人有办法过滤交叉过滤器 https github com square crossfilter wiki API Reference多个值的对象维度 就像是 filterExact cash visa or filter cash v
  • Android - 在相对布局的ImageView中居中Textview

    我有一个带有 ImageView 的相对布局 并且希望在活动布局 xml 文件中将 TextView 置于 ImageView 的中心 这是图像视图 然后是我为 TextView 尝试过的内容 这是相对布局的内部
  • 拖放文件上传

    因此 我正在努力寻找我正在寻找的东西以及如何实现它 我有一个基本的 PHP 文件上传器 用户按下自定义上传按钮 选择一个文件 然后使用 JS 检查更改 即用户选择文件 然后提交上传图像的表单美好的 我现在还想要一个拖放上传区域 因此 用户可
  • 查找数组中缺失的数字

    我试图找到数组中每个缺失的数字 如下所示 Array 0 gt 1 1 gt 2 2 gt 3 3 gt 4 4 gt 5 5 gt 6 6 gt 7 7 gt 8 8 gt 9 9 gt 10 10 gt 11 11 gt 12 12 g
  • 如何在asp.net core rc2中获取控制器的自定义属性

    我创建了一个自定义属性 AttributeUsage AttributeTargets Method AttributeTargets Class public class ActionAttribute ActionFilterAttri
  • Angular-xeditable 可编辑 (Bs​​3),带有日期和 ng-repeat

    我尝试扩展 Angular xeditable 可编辑行 Bs3 的特定示例 添加字段 出生日期 我创建了一个 jsfiddle 来描述问题 http jsfiddle net ffgj62q0 http jsfiddle net ffgj
  • neo4j 在从 csv 导入期间指定数据类型

    有没有办法在导入时告诉neo4j值的类型 例如 neo4j 是否知道 2015 0104T10 33 44 是日期还是字符串 thanks Neo4j 使用 Java 原始类型 字符串或数组作为属性值 没有日期类型 所以 2015 0104
  • ssh-add,自动添加私钥

    我有一个公私 ssh 密钥对 由ssh keygen without密码 我将它与我的 bitbucket 帐户一起使用 特别是与 Mercurial 存储库一起使用 通常我在我的家庭工作电脑中手动添加私钥 使用ssh add ssh id
  • 获取屏幕分辨率作为cmd中的变量

    我需要一个脚本来根据所使用的屏幕分辨率复制特定图像 到目前为止我发现wmic desktopmonitor get screenheight给了我适当的输出 但我在将其解析为可用变量时遇到问题 问题是输出分为三行 我只需要第二行的信息 有人
  • 从详细信息选项卡中获取文件描述

    我希望能够从 dll 或 sys 文件的详细信息选项卡中获取文件描述字符串 我尝试过多种方法来做到这一点 但无法让它们点击 无论如何 是否可以通过命令行执行此操作 使其在屏幕上生成输出 我对使用 VB 提供的 FileVersion des
  • 判断鼠标是否位于表单上方的最佳方法是什么?

    我想通了如何捕获鼠标点击 https stackoverflow com questions 2866936 how can i add an event handler to an event by name覆盖整个表单 但此方法不能很好
  • 从 file:// 方案运行的应用程序出现 CORS 错误

    我有一个 AngularJS Cordova 应用程序 它轮询远程服务器上的 JSON 服务 http method GET url http example com index php 在浏览器中开发并在我的 Intranet apach
  • Vuetify 在浅色和深色主题之间切换(使用 vuex)

    所以在我的 Vue 项目中 我基本上有两个页面 组件 将根据 URL 使用 vue router 显示 我可以通过按钮在这些页面 组件之间切换 我还使用 VueX 来管理一些数据 现在 我在其中一个组件中添加了一个开关 用于在 Vuetif
  • 删除组合框的边框

    我正在使用 C 开发一个用于显示信息的表单 但我仍然需要允许对信息进行一些操作 我真正想做的是从组合框中删除边框 这将允许我显示信息 同时还允许用户选择集合中的其他项目 而不必显示所有项目 更具体地说 我有一个包含 4 或 5 个电子邮件地
  • 我网站的 CSS 何时会影响我的搜索引擎排名?

    起初我认为 css 绝对没有什么用处 只是当用户在浏览器中查看文档时设计文档样式 但后来我意识到搜索引擎也在索引页面中使用CSS 搜索引擎不会将内容编入索引display hidden我相信 并且严厉惩罚使用关键字堆叠的网站 用户从未见过的
  • POSIX Shell 反斜杠混淆

    我正在尝试创建一个具有简单功能的 shell 脚本 但似乎我无法理解如何正确处理反斜杠 我的功能之一如下所示 bin sh func cmd printf s n cmd echo e cmd func NAME n 这是正确的输出 因为我