Bash 从输入中获取文件夹名称的正确方法

Bash 从输入中获取文件夹名称的正确方法,bash,stdin,Bash,Stdin,我写了一个脚本,但在从stdin获取文件夹名称时遇到了问题 这是我的问题 myfunc: 我调用我的函数: $./myfunc testdir 这样我就得到了预期的输出,这意味着在当前目录中有另一个名为testdir\u rnn的目录 但是当我这样调用我的函数时: $./myfunc testdir/ 我有问题;它在testdir文件夹中创建\u rnn文件夹,因为: 在本例中,echo${audio}\n是testdir/\u rnn 从输入中获取文件夹名称的正确方法是什么?添加句点。在变

我写了一个脚本,但在从stdin获取文件夹名称时遇到了问题 这是我的问题

myfunc:

我调用我的函数:

$./myfunc testdir
这样我就得到了预期的输出,这意味着在当前目录中有另一个名为testdir\u rnn的目录

但是当我这样调用我的函数时:

$./myfunc testdir/
我有问题;它在testdir文件夹中创建\u rnn文件夹,因为: 在本例中,echo${audio}\n是testdir/\u rnn


从输入中获取文件夹名称的正确方法是什么?

添加句点。在变量之前,可以根据需要修复此问题

  #!/bin/bash 
audio=$1 
mkdir -p .${audio}_rnn 

但是为了创建目录,您必须已经有testdir/了。

添加一个句点。在变量之前,可以根据需要修复此问题

  #!/bin/bash 
audio=$1 
mkdir -p .${audio}_rnn 

但是为了创建目录,您必须已经有testdir/了。

假设目录将在没有上层的情况下传递。 你可以用切割之类的东西

!/bin/bash

my_dir=$echo$1 | cut-d/-f1

mkdir-p${my_dir}\n

。。。。 代码的其余部分

现在使用
./my_script.sh test_dir或./my_script.sh test_dir/两者都可以工作

假设目录将在没有上层的情况下传递。 你可以用切割之类的东西

!/bin/bash

my_dir=$echo$1 | cut-d/-f1

mkdir-p${my_dir}\n

。。。。 代码的其余部分

现在使用
./my_script.sh test_dir或./my_script.sh test_dir/两者都可以工作

只需修剪“/”即可。请在代码中使用${1%/},如下所示:

audio=${1%/}

mkdir -p ${audio}_rnn

...
rest of code
...

您只需修剪“/”即可。请在代码中使用${1%/},如下所示:

audio=${1%/}

mkdir -p ${audio}_rnn

...
rest of code
...

您可以使用正则表达式删除最后一个/sed:

#!/bin/bash 
echo 'Dir/test/' | sed 's/\/$//'

输出:Dir/test

您可以使用正则表达式删除最后一个/with sed:

#!/bin/bash 
echo 'Dir/test/' | sed 's/\/$//'

输出:Dir/test

basename$1假设您提供的名称只包含Dir name,而不包含更高级别的名称将是一个解决方案,这里的问题是尾部的斜杠/。要删除它,请使用${audio%/}删除尾部斜杠(如果存在),否则不要使用该值,因此您有mkdir-p${audio%/}\u rnnbasename$1,假设您提供的名称仅包含dir name,而不包含更高级别,这将是一个解决方案。问题在于尾部斜杠/。若要删除它,请使用${audio%/}删除尾部斜杠(如果存在),否则不要使用该值,因此mkdir-p${audio%/}\n您看不到这是如何解决问题的。我看不到这是如何解决问题的。您假设只有一个目录级别,因此如果使用testdir1/subdir2/作为参数,则此操作将失败。使用我首先建议的${audio%/}修复程序。假设只有一个目录级别,因此如果使用testdir1/subdir2/作为参数,则此操作将失败。使用我首先建议的${audio%/}修复程序。