在bash中我想从命令行字符串中获取文件名。但不是当前的($ 0)脚本!
我的文件中充满了带参数的脚本。我只需要它的脚本!
例如我有一个像这样的字符串: / path / to / file parameter1 -p2
我想得到:/ path / to / file(没有参数) 即使在案件中:
/an\ example/with.dot.in_it/.hidden_file.sh par\ ameter1 p.dot.2
./script.sh p1 p2
../script.sh p1 p2
/any////relative/../path/./to/script.sh p1 p2
所以在任何有效的linux路径和文件名的情况下!
为此目的是否有正则表达式,或者还有其他方法可以解决这个问题吗?
提前致谢!
答案 0 :(得分:1)
您可以使用perl的命令行正则表达式功能与readlink命令结合使用始终获取脚本的完整路径。让我们的数据是您的文件名,包含所有命令及其参数。您可以使用这样的脚本来获取脚本的完整路径:
while read -r F
do
SCRIPT=$(perl -pe 's/^(.*?)(?<!\\) .*$/\1/;s/\\//g' <<< $F)
readlink -f "$SCRIPT"
done < data
答案 1 :(得分:0)
要从.hidden_file.sh
内获取shell或shell脚本的名称,可以使用$0
:
echo "$0"
答案 2 :(得分:0)
您可以使用dirname命令。
答案 3 :(得分:0)
如果您真的想使用正则表达式(上面描述了许多更好的解决方案),那么这可能会对您有所帮助:
/^(.+[^\\]) /
这匹配到第一个空格的所有字符,它不跟在\
之后您从捕获的组中获取路径
答案 4 :(得分:0)
basename "$string"
或者
${string##*/}