过去的旧建议是对任何涉及 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可以省略 内部的双引号[[ ... ]],但不能省略内部 …
这可能是一个愚蠢的问题,但我仍然问它。如果我已经宣布了一个shebang
#!/bin/bash
Run Code Online (Sandbox Code Playgroud)
在开始时my_shell_script.sh,我是否总是必须使用 bash 调用此脚本
[my@comp]$bash my_shell_script.sh
Run Code Online (Sandbox Code Playgroud)
或者我可以使用例如
[my@comp]$sh my_shell_script.sh
Run Code Online (Sandbox Code Playgroud)
我的脚本使用shebang确定正在运行的shell?难道同样的事情发生与ksh壳呢?我正在使用 AIX。
不知何故,大引号进入了我的代码,我得到了意想不到的行为
\n#!/bin/sh\n\nif [ foo = \xe2\x80\x98foo\xe2\x80\x99 ]; then\n echo yes\nelse\n echo no\nfi\nRun Code Online (Sandbox Code Playgroud)\n我希望这会回显 yes,但实际上却回显 no。
\n