我正在编写一个shell脚本来输入多个文件夹。
我目前将文件夹的名称存储在shell变量中path="October\ @012/"
。
如果我cd $path
我收到错误 bash:cd:October \:没有这样的文件或目录
我做错了什么?
答案 0 :(得分:5)
这是双引号的(主要)函数,在csh和* sh shell中也是如此。
cd "$TARGET"
应该这样做。
Shell变量在"..."
内展开(与'...'
不同),但是当shell解析命令行以构造传递给程序的字符串时,引用的文本被视为单个参数
例如:
% ls -F
October @012/
% TARGET="October @012"
% cd $TARGET
bash: cd: October: No such file or directory
% cd "$TARGET"
% pwd
/tmp/t/October @012
%
简单!
在您的初始示例中,您所做错的是转义内部引号。该空间不必转义两次,因为这个冗余的\
出现在引号内,它只是在TARGET变量中插入一个反斜杠。例如:
% TARGET="October\ @012" # wrong!
% ls
October @012/
% cd $TARGET
bash: cd: October\: No such file or directory
% cd "$TARGET"
bash: cd: October\ @012: No such file or directory
%
TARGET
的此设置仅在目录名为October\ @012
且其中带有反斜杠时才有效(不推荐!):
% mkdir October\\\ @012
% ls -F
October\ @012/
% cd "$TARGET"
% pwd
/tmp/t/October\ @012
%
(已编辑以添加示例)
答案 1 :(得分:1)
首先它真的取决于你在编写脚本的哪个 shell。如果是bash那么你可以尝试在变量名周围使用引号:
TARGET="October @012"
cd "$TARGET"
这也适用于其他shell。我建议你尝试一下。
编辑:
在重新检查时,您似乎正在逃避表达中的错误部分。试试这个:
path="October \@012"
cd "$path"