我正在编写一个使用Dcm2niix的bash脚本。 Dcm2niix的命令包含单引号。我试图以多种方式在脚本上添加单引号,但这是行不通的。
我的工作系统(环境?)是:Ubuntu 18.04.1 LTS。
Dcm2niix是DICOM到NifTI的转换器。它将.dcm
文件转换为.nii
文件。
其命令通常类似于:
dcm2niix [options] <sourcedir>
<sourcedir>
类似于:
'sourcedir'
(没有单引号不起作用)
在终端上,输入
dcm2niix -m y -f %d 'file_path'
用来将.dcm文件转换为file_path目录中的.nii文件。 我想创建一个脚本,以自动将一些.dcm文件转换为单独的目录。 因此,我写了类似的内容:
file_path=Desktop/test/
dcm2niix -m y -f %d '$file_path'
在这里,我尝试将文件路径视为变量。但这是行不通的。最后一行代码出错。 另外,
dcm2niix -m y -f %d "'$file_path'"
和
dcm2niix -m y -f %d '"$file_path"'
和
dcm2niix -m y -f %d `'$file_path'`
效果不好。
我从先前显示的代码中得到的错误:
输出文件夹无效:桌面/测试
输出文件夹无效:“桌面/测试”
输出文件夹无效:“桌面/测试”
输出文件夹无效:$ file_path
答案 0 :(得分:1)
仅当终端中包含空格或glob之类的特殊字符时,才需要在终端的file_path周围使用''
。 Desktop/test/
并非如此。但是在脚本中,您有一个变量$file_path
,您想将其扩展为Desktop/test/
,因此''
可以防止这种情况。尝试使用双引号"
代替'
。或者尝试使用\'
而不是'
来避免单引号的特殊含义。
dcm2niix -m y -f %d "$file_path"
或
dcm2niix -m y -f %d \'"$file_path"\'
但是我怀疑<sourcedir>
确实需要单引号。
答案 1 :(得分:1)
在shell中引用有两个主要目的:
双引号将允许在其中进行变量扩展和命令替换之类的事情。
单引号不允许任何扩展。
引号内的引号没有特殊用途:在双引号字符串内,单引号只是普通字符,反之亦然。
还要注意,一旦外壳准备好实际调用命令,引号就会被删除。 dcm2niix
命令将接收参数Desktop/test/
而不是"Desktop/test/"