Bash 从输入中获取文件夹名称的正确方法
我写了一个脚本,但在从stdin获取文件夹名称时遇到了问题 这是我的问题 myfunc: 我调用我的函数:Bash 从输入中获取文件夹名称的正确方法,bash,stdin,Bash,Stdin,我写了一个脚本,但在从stdin获取文件夹名称时遇到了问题 这是我的问题 myfunc: 我调用我的函数: $./myfunc testdir 这样我就得到了预期的输出,这意味着在当前目录中有另一个名为testdir\u rnn的目录 但是当我这样调用我的函数时: $./myfunc testdir/ 我有问题;它在testdir文件夹中创建\u rnn文件夹,因为: 在本例中,echo${audio}\n是testdir/\u rnn 从输入中获取文件夹名称的正确方法是什么?添加句点。在变
$./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/testbasename$1假设您提供的名称只包含Dir name,而不包含更高级别的名称将是一个解决方案,这里的问题是尾部的斜杠/。要删除它,请使用${audio%/}删除尾部斜杠(如果存在),否则不要使用该值,因此您有mkdir-p${audio%/}\u rnnbasename$1,假设您提供的名称仅包含dir name,而不包含更高级别,这将是一个解决方案。问题在于尾部斜杠/。若要删除它,请使用${audio%/}删除尾部斜杠(如果存在),否则不要使用该值,因此mkdir-p${audio%/}\n您看不到这是如何解决问题的。我看不到这是如何解决问题的。您假设只有一个目录级别,因此如果使用testdir1/subdir2/作为参数,则此操作将失败。使用我首先建议的${audio%/}修复程序。假设只有一个目录级别,因此如果使用testdir1/subdir2/作为参数,则此操作将失败。使用我首先建议的${audio%/}修复程序。