【问题标题】:Mac os shell script cd folder with spaces not working带有空格的 Mac os shell 脚本 cd 文件夹不起作用
【发布时间】:2017-02-01 19:29:29
【问题描述】:

在我开始之前,请不要咬我的头,我知道这个问题在这里和其他论坛已经被问过很多次了,但是我无法让这个简单的 shell 脚本工作。

这是我的脚本:

#!/bin/bash

DEST=“/Volumes/Ext\ 1TB/Google\ Drive/Backup\ Ralph/mac”

echo dest is $DEST
cd $DEST

这是我的输出:

bash -x gdrive.sh 
+ DEST='“/Volumes/Ext 1TB/Google Drive/Backup Ralph/mac”'
+ echo dest is $'?\200\234/Volumes/Ext' 1TB/Google Drive/Backup $'Ralph/mac?\200\235'
dest is “/Volumes/Ext 1TB/Google Drive/Backup Ralph/mac”
+ cd $'?\200\234/Volumes/Ext' 1TB/Google Drive/Backup $'Ralph/mac?\200\235'
gdrive.sh: line 6: cd: “/Volumes/Ext: No such file or directory

我尝试了很多组合,比如单引号或双引号,或者用反斜杠转义,或者用双引号和反斜杠转义

如果我在变量周围加上双引号,输出会给我一些数字,如您在我的示例中看到的那样。

有人知道转义引号的正确用法和组合是什么吗?

希望有人能帮忙

问候,

拉尔夫

【问题讨论】:

  • 双引号不是普通的双引号,而是特殊字符。这里是固定的:"/Volumes/Ext\ 1TB/Google\ Drive/Backup\ Ralph/mac"。顺便说一句,您不需要使用 \ 转义嵌入的空格,这也可以正常工作:"/Volumes/Ext 1TB/Google Drive/Backup Ralph/mac"

标签: bash macos shell escaping


【解决方案1】:

只要做:

DEST="/Volumes/Ext 1TB/Google Drive/Backup Ralph/mac"

cd "$DEST"

您需要 cd 行中的引号,因为 $DEST 的值只是插入到命令行中,没有它们会为 cd 生成 4 个参数:

cd $DEST

=>

cd /Volumes/Ext 1TB/Google Drive/Backup Ralph/mac

HTH

附:我假设您问题中的花引号“”只是一个自动更正的错字,您知道使用直引号“”

【讨论】:

  • 就是这样!它适用于那些花引号,不是错字,我在 mac os 的默认文本编辑器中编辑 bash 文件......这个文本编辑器将普通引号转换为花引号。从来没有想过花引号谢谢CRD。这不会再发生了,我现在安装了 sublime text 3,从现在开始我将使用文本编辑器输入字母:-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-04
  • 1970-01-01
  • 2011-08-30
  • 2020-03-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多