在 bash 中嵌套引号

发布于 2024-11-18 16:36:22 字数 354 浏览 2 评论 0原文

我想在 bash 中执行类似的操作:

 alias foo='bar="$(echo hello world | grep \"hello world\")"; echo $bar;'; foo

预期输出:hello world

输出:grep: world": 没有这样的文件或目录

  • 外引号必须是单引号,双引号 $bar 将为空。

  • 接下来的引号必须是双引号,单引号 $() 不会扩展。

  • 内部引号可以是两种类型的引号,但单引号不允许在其中使用单引号。

我该如何实现这一点?

I want to something like this in bash:

 alias foo='bar="$(echo hello world | grep \"hello world\")"; echo $bar;'; foo

Expected output: hello world

Ouput: grep: world": No such file or directory

  • The outer quotes have to be single quotes, with double quotes $bar would be empty.

  • The next quotes have to be double quotes, with single quotes $() wouldn't expand.

  • The inner quotes could be both type of quotes, but single quotes doesn't allow single quotes inside of them.

How to I achieve this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

亚希 2024-11-25 16:36:22

$() 里面的东西代表一个子shell,所以你可以在里面放置未转义的双引号

alias foo='bar="$(echo testing hello world | grep "hello world")"; echo "$bar"'

The stuff inside $() represents a subshell, so you are allowed to place un-escaped double quotes inside

alias foo='bar="$(echo testing hello world | grep "hello world")"; echo "$bar"'
陌路终见情 2024-11-25 16:36:22

有点不清楚“类似这样的东西”是什么意思,但实现这里似乎要点的最简单方法是一个简单的函数:

foo() {
    echo 'hello world' | grep 'hello world'
}
foo
  • 不需要中间变量赋值(无论如何它都会丢失)。
  • 函数通常优于别名,因为函数具有更大的灵活性(参数处理)和可读性(多行;更少的转义)。
  • 始终使用可能有效的最简单的解决方案

It's a bit unclear what "something like this" means, but the simplest way to achieve what seems to be the point here is a simple function:

foo() {
    echo 'hello world' | grep 'hello world'
}
foo
  • There's no need for an intermediate variable assignment (it will be lost anyway).
  • Functions are generally preferred over aliases because of more flexibility (parameter handling) and readability (multiple lines; less escaping).
  • Always use the simplest solution which could possibly work.
姐不稀罕 2024-11-25 16:36:22

逃离空间

alias foo='bar="$(echo hello world | grep hello\ world)"; echo $bar;'

Escape the spaces

alias foo='bar="$(echo hello world | grep hello\ world)"; echo $bar;'
痴意少年 2024-11-25 16:36:22

$() 周围的双引号不是必需的:

alias foo='bar=$(echo hello world | grep "hello world"); echo $bar;'
foo

# Output:
hello world

The double quotes around $() are not necessary:

alias foo='bar=$(echo hello world | grep "hello world"); echo $bar;'
foo

# Output:
hello world
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文