有人能告诉我是否应该在shell脚本中包含变量的引号?
例如,以下是正确的:
xdg-open $URL
[ $? -eq 2 ]
Run Code Online (Sandbox Code Playgroud)
要么
xdg-open "$URL"
[ "$?" -eq "2" ]
Run Code Online (Sandbox Code Playgroud)
如果是这样,为什么?
我正在制作一个基本计算器来熟悉传递参数。我编码的函数是:
int op(char* sig, int num1, int num2)
{
char sign=*sig;
if(sign == '+') return num1+num2;
if(sign == '/') return num1/num2;
if(sign == '-') return num1-num2;
if(sign == '*') return num1*num2;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我的主要函数获取数字和符号并调用“op”函数。
int main(int argc, char *argv[])
{
int num1=atoi(argv[1]);
int num2=atoi(argv[3]);
char* sig=argv[2];
int res=op(sig,num1,num2);
printf("%d\n",res);
}
Run Code Online (Sandbox Code Playgroud)
问题是当我使用“./”命令通过终端调用程序时,它不会将该*符号视为字符。相反,当我*在参数中使用时,该参数就变成了pipewriter.c我编码的文件的名称。例如,./pw.exe 3 + 4打印7时./pw.exe 3 * 4只打印 0。
如何将*符号用作字符'*'?
我一直致力于在 Bash 脚本中以编程方式设置 cron 作业。
在其中我有这样一行:
JOB="00 12 * * * sh dosomething.sh"
我注意到如果我回应了 var $JOB,它包含目录的文件吗?
有没有办法将 * 符号作为普通字符存储在 var 中?
谢谢,
在几个手册(包括官方GNU/Linux命令行工具tldp.org)中,建议使用单引号(或双引号)来避免bash解释通配符或正则表达式符号,如插入符号(^)和美元($).
但在一些例子中,没有必要使用单/双引号.例如:
(1)
$ touch 'fo*'
Run Code Online (Sandbox Code Playgroud)
和
$ touch fo*
Run Code Online (Sandbox Code Playgroud)
fo*在两个命令行窗体中创建相同的文件.
(2)
$ grep '^foo' file.txt
Run Code Online (Sandbox Code Playgroud)
和
$ grep ^foo file.txt
Run Code Online (Sandbox Code Playgroud)
都foo在file.txt行的开头搜索一个字符串.
为什么手册建议使用单/双引号来避免bash解释,如果bash实际上不首先解释一些通配符和正则表达式符号?