我遇到了一个奇怪的问题。如果我输入终端cd "folder"
(带有文件夹名称旁边的引号),它就能正常工作。
但是如果我在我的bash脚本中使用下面的代码,它会给我一个错误,说该文件夹不存在。
path="\"folder\""
echo $path ---> outputs "folder", with quotes
cd $path
当我在终端中编写cd "folder"
并且运行下面的脚本时,我位于同一个文件夹中。
有什么问题?
编辑:让自己清楚。我需要在文件夹名称周围使用引号,因为某些文件夹包含空格。
答案 0 :(得分:0)
shell将扩展参数一次。使用#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#define LINE_LEN (1024)
int main(void)
{
int action = 0;
char input[LINE_LEN] = {0};
size_t len = 0;
printf("enter decision: ");
{
int c = fgetc(stdin); /* equivalent to getchar() */
if (EOF == c)
{
putc('\n');
if (ferror(stdin))
{
perror("fgetc(stdin) failed");
}
else
{
fprintf(stderr, "read EOF, aborting ...\n");
}
exit(EXIT_FAILURE);
}
action = c;
}
/* read left over from previous input: */
{
int c = fgetc(stdin);
if (EOF == c)
{
putc('\n');
if (ferror(stdin))
{
perror("fgetc(stdin) failed");
exit(EXIT_FAILURE);
}
}
else if ('\n' != c)
{
fprintf(stderr, "read unexpected input (%d), aborting ...\n", c);
exit(EXIT_FAILURE);
}
}
len = strlen(input);
if (LINE_LEN <= len + 1)
{
fprintf(stderr, "input buffer full, aborting ...\n");
exit(EXIT_FAILURE);
}
switch(action - '0')
{
case 1:
printf("enter file name: ");
if (NULL == fgets(input + len, LINE_LEN - len, stdin))
{
putc('\n');
if (ferror(stdin))
{
perror("fgets() failed");
}
else
{
fprintf(stderr, "missing input, aborting ...\n");
}
exit(EXIT_FAILURE);
}
(input + len)[strcspn(input + len, "\n")] = '\0'; /* cut off new-line, if any. */
printf("read file name '%s'\n", input + len);
break;
default:
fprintf(stderr, "unknown action (%d), aborting ...\n", action);
exit(EXIT_FAILURE);
break;
}
}
时,会在执行cd "folder"
之前删除引号。精细。
使用cd
,shell会在带引号的字符串中翻译cd $path
。 $path
尝试在名称中找到带引号的目录。
答案 1 :(得分:0)
您需要输入如下所示的引号: -
.intel_syntax noprefix
.section .text
.global _start
_start:
push 4
pop rax
xor ebx,ebx
inc ebx # ebx = 1 = stdout
mov DWORD PTR [rsp-0x4],0x646c72
mov DWORD PTR [rsp-0x8],0x6f57206f
mov DWORD PTR [rsp-0xc],0x6c6c6548
sub rsp, 0xc
xor rcx,rcx
mov rcx, rsp
push 11
pop rdx
int 0x80
xor eax,eax
inc eax
xor ebx,ebx
int 0x80
答案 2 :(得分:0)
您试图转到'folder'
而不是"folder"
,而不是说您尝试访问folder
而不是folder
。我想你想访问cd "folder"
。
引用是定义一个字符串,在你的情况下,你不需要它在字符串内容中。
当您编写folder
时,您定义了一个包含cd "$path"
您必须重新修改数据来源,以删除不需要的报价。
与@Abhijit一样,Pritam回答说,如果你有空间或角色可以被shell解释,你可以用双引号括起你的变量:path="folder with space"
echo -n $path ---> outputs folder with space
cd "$path"
。正如manual:
用双引号括起字符('&#34;')会保留引号内所有字符的字面值,但'$','`','\'以及启用历史记录扩展时除外,'!'。
[...]字符'$'和'`'在双引号中保留其特殊含义
所以代码,从数据源中删除了双引号:
{{1}}
我建议您在文件夹名称中没有空格,这样可以防止出现空间问题。