Bash 如何指定文件';作为输入目录的一部分的名称?

Bash 如何指定文件';作为输入目录的一部分的名称?,bash,unix,Bash,Unix,我有一个目录中的文件,格式为 我想运行一个包含文件名作为输入的命令。地址路径是 /用户/jjuan/Documents/MTAutism/new_MTR_数据集/UsableNii/0163-301_02_29_2008_off.nii 等等 到目前为止,我已经知道这是我写的代码 for file in *_on.nii; do set fileroot = ${file} cut -b 1-78 echo $fileroot /usr/local/fsl414/bin/flirt -in

我有一个目录中的文件,格式为

我想运行一个包含文件名作为输入的命令。地址路径是

/用户/jjuan/Documents/MTAutism/new_MTR_数据集/UsableNii/0163-301_02_29_2008_off.nii

等等

到目前为止,我已经知道这是我写的代码

for file in *_on.nii; do

set fileroot = ${file} cut -b 1-78
echo $fileroot

/usr/local/fsl414/bin/flirt -in $file  -ref /Users/jjuan/Documents/MTAutism/new_MTR_datasets/UsableNii/$fileroot_off.nii -out /Users/jjuan/Documents/MTAutism/new_MTR_datasets/UsableNii/$fileroot_ontooff -omat /Users/jjuan/Documents/MTAutism/new_MTR_datasets/UsableNii/$fileroot_ontooff.mat -bins 256 -cost corratio -searchrx -90 90 -searchry -90 90 -searchrz -90 90 -dof 6  -interp trilinear

done

但是,$fileroot集不会出现在指定的路径中,它只输出一个空格。

首先修复变量命名:

for files in *_on.nii; do
    ^^^^^- files with an S

set fileroot = ${file} cut -b 1-78
                 ^^^^-- -file WITHOUT an S

不要使用
set
,因为它的目的是操作shell选项/变量,请使用以下命令:

fileroot="$(echo ${file} | cut -b 1-78)"

还要确保将对
fileroot
变量的引用用大括号括起来,即
${fileroot}\u ontoff
来分隔变量名我不太明白您的意思,但是如果您想从
0163-301\u 02\u 29\u 2008\u on.nii
更改为
0163-301\u 02\u 29\u 2008\u off.nii

cd /Users/jjuan/Documents/MTAutism/new_MTR_datasets/UsableNii
for on_file in *_on.nii; do
    off_file=$PWD/${on_file/on.nii/off.nii}
    # Do something with off_file
done
以上内容将“on.nii”替换为“off.nii”

更新
我更改了代码,以包含每个请求的完整路径。

很抱歉,我之前已经更正了它,但遇到了相同的问题。
集合
也不正确。这不是你调用剪切的方式,或者传递一个文件名来剪切…你能帮我纠正一下吗?我对bash编码非常陌生,不确定这部分有什么问题。我如何才能将这个off_文件放到一个路径中?例如
/Users/jjuan/Documents/MTAutism/new_MTR_datasets/UsableNii/$off_file
如果您已经在该目录中,请使用变量$PWD。查看我的更新代码。我尝试了这一点,但它似乎将其理解为
'/Users/jjuan/Documents/MTAutism/new\u MTR\u dataset/UsableNii/\u ontoff'
echo$文件的输出是什么;echo${file}| cut-b1-78?您是否需要按字节、按字符进行剪切,
-c
,可能更易于阅读。我将其更改为-c。我得到的输出是
-bash:local:只能用于函数**错误(nifti\u image\u read):无法找到“/Users/jjuan/Documents/MTAutism/new\u MTR\u dataset/UsableNii/”的头文件**错误:nifti\u image\u open”(/Users/jjuan/Documents/MTAutism/new_MTR_datasets/UsableNii/):错误的标题信息
抱歉,请删除
本地
,正如错误所述,它仅在函数内部可用
cd /Users/jjuan/Documents/MTAutism/new_MTR_datasets/UsableNii
for on_file in *_on.nii; do
    off_file=$PWD/${on_file/on.nii/off.nii}
    # Do something with off_file
done