bash脚本中目录名中的括号

bash脚本中目录名中的括号,bash,matlab,shell,octave,Bash,Matlab,Shell,Octave,我在意外标记“(”附近执行bash语法错误时出错 我知道错误是由')引起的,但我认为将命令放在'之间是为了允许在目录名中插入括号。如何在不重命名名称的情况下修复此问题 bash -c 'cd /tmp/h1/clients/04212015142432811_Fs_1000_ahh/pls/03sox_a_Fs_1000_ahh_(000_bit)_(0.0000 0sig_in_deg)_to_(508_bit)_(30.00000sig_in_deg) && exec bas

我在意外标记“(”附近执行bash语法错误时出错

我知道错误是由')引起的,但我认为将命令放在'之间是为了允许在目录名中插入括号。如何在不重命名名称的情况下修复此问题

bash -c 'cd /tmp/h1/clients/04212015142432811_Fs_1000_ahh/pls/03sox_a_Fs_1000_ahh_(000_bit)_(0.0000
0sig_in_deg)_to_(508_bit)_(30.00000sig_in_deg) && exec bash xfade.sh'
请注意:
它是从八度音阶内部调用的一个数学程序,比如matlab,你为什么要为外壳而烦恼呢?将参数引用到
cd

(cd '/tmp/h1/clients/04212015142432811_Fs_1000_ahh/pls/03sox_a_Fs_1000_ahh_(000_bit)_(0.00000sig_in_deg)_to_(508_bit)_(30.00000sig_in_deg)' && exec bash xfade.sh)
如果您真的必须使用额外的
bash-c

dirname='/tmp/h1/clients/04212015142432811_Fs_1000_ahh/pls/03sox_a_Fs_1000_ahh_(000_bit)_(0.00000sig_in_deg)_to_(508_bit)_(30.00000sig_in_deg)'
bash -c 'cd "$1" && exec bash xfade.sh' _ "$dirname"

您需要引用传递给bash子shell的命令字符串内部的路径。例如:

bash -c 'cd '"'"'/tmp/h1/clients/04212015142432811_Fs_1000_ahh/pls/03sox_a_Fs_1000_ahh_(000_bit)_(0.00000sig_in_deg)_to_(508_bit)_(30.00000sig_in_deg) && exec bash xfade.sh'"'"''
之所以会出现错误,是因为运行bash-c会将参数字符串传递给新的shell。参数字符串的单引号将被外部(调用)shell剥离


更新:要正确引用Charles Duffy指出的单引号中的单引号,可以对bash-c使用双引号吗

 bash -c "cd '/tmp/h1/clients/04212015142432811_Fs_1000_ahh/pls/03sox_a_Fs_1000_ahh_(000_bit)_(0.00000sig_in_deg)_to_(508_bit)_(30.00000sig_in_deg)' && exec bash xfade.sh"

bash-c
把事情搞砸了。为什么你需要它呢?它是从八度音阶内部调用的一个数学程序,比如matlab…它不能回答这个问题(至少,对于还没有八度音阶知识的人来说不是这样)。如果您链接到相关的Octave文档,这可能会有助于……更好地解释为什么这里的引号对您没有帮助:它们被外壳(启动
bash-c
的外壳,而不是启动
bash-c
的外壳)使用,因此当调用内部外壳时,它们不再存在。您说“我在意外标记“(“…我知道错误是由“)”引起的)附近执行bash语法错误时出错。。。“。如果外壳告诉你问题是X,你为什么会认为它实际上是Y?”?错误出现在左括号中,而不是右括号中。。。不要猜测外壳,阅读它告诉你的。这会把你留在目录中。为了避免这种情况,用括号括住整个命令;如果我们在做显式的子shell,不妨把
exec
放回去。我想你可以把
exec
放回去,但我不介意。它是从八度音阶内部调用的,像MatlabBackslax这样的数学程序在单引号字符串中不起作用<代码>'''是执行此操作的典型方式,虽然这很难看。如果文件名可能由外部参与者控制,则有点风险。考虑将某人的代码> $(FO)< /代码>放入文字。