相关疑难解决方法(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万
查看次数

shebang 是否确定运行脚本的 shell?

这可能是一个愚蠢的问题,但我仍然问它。如果我已经宣布了一个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。

scripting executable shebang

110
推荐指数
4
解决办法
8万
查看次数

什么是大引号?我可以在代码中使用它们吗?

不知何故,大引号进入了我的代码,我得到了意想不到的行为

\n
#!/bin/sh\n\nif [ foo = \xe2\x80\x98foo\xe2\x80\x99 ]; then\n   echo yes\nelse\n   echo no\nfi\n
Run Code Online (Sandbox Code Playgroud)\n

我希望这会回显 yes,但实际上却回显 no。

\n

special-characters shell-script quoting

8
推荐指数
1
解决办法
3864
查看次数