相关疑难解决方法(0)

什么时候需要双引号?

过去的旧建议是对任何涉及 a 的表达式加双引号$VARIABLE,至少在希望 shell 将其解释为单个项目的情况下,否则,内容中的任何空格$VARIABLE都会脱离 shell。

但是,我知道在较新版本的 shell 中,不再总是需要双引号(至少出于上述目的)。例如,在bash

% FOO='bar baz'
% [ $FOO = 'bar baz' ] && echo OK
bash: [: too many arguments
% [[ $FOO = 'bar baz' ]] && echo OK
OK
% touch 'bar baz'
% ls $FOO
ls: cannot access bar: No such file or directory
ls: cannot access baz: No such file or directory
Run Code Online (Sandbox Code Playgroud)

zsh,而另一方面,同样的三个命令成功。因此,基于此实验,似乎在 中bash可以省略 内部的双引号[[ ... ]],但不能省略内部 …

shell bash zsh shell-script quoting

147
推荐指数
1
解决办法
6万
查看次数

shell 中的 "..."、'...'、$'...' 和 $"..." 引号之间有什么区别?

有时候,我看到shell脚本使用所有的引用一些文字,这些不同的方式:"..."'...'$'...',和$"..."。为什么有这么多不同类型的引用被使用?

他们的行为是否有所不同或影响了我在他们内部可以做的事情?

shell bash zsh shell-script quoting

57
推荐指数
1
解决办法
7660
查看次数

在 ssh $host $FOO 和 ssh $host "sudo su user -c $FOO" 类型构造中引用

我经常最终通过 ssh 发出复杂的命令;这些命令涉及到 awk 或 perl 一行的管道,因此包含单引号和 $。我既无法找出正确执行引用的硬性规则,也没有找到很好的参考。例如,请考虑以下事项:

# what I'd run locally:
CMD='pgrep -fl java | grep -i datanode | awk '{print $1}'
# this works with ssh $host "$CMD":
CMD='pgrep -fl java | grep -i datanode | awk '"'"'{print $1}'"'"
Run Code Online (Sandbox Code Playgroud)

(注意 awk 语句中的额外引号。)

但是我如何让它与它一起工作,例如ssh $host "sudo su user -c '$CMD'"?在这种情况下是否有管理报价的通用方法?..

shell bash ssh quoting

33
推荐指数
2
解决办法
1万
查看次数

标签 统计

bash ×3

quoting ×3

shell ×3

shell-script ×2

zsh ×2

ssh ×1