aka*_*asb 1 linux shell scripting shell-script
FILENAME=$(echo /root/Source/code/script.sh | grep -oE "[^/]+$")
Run Code Online (Sandbox Code Playgroud)
我知道它会给我文件路径中的文件名作为script.sh
. 但是有人可以向我解释一下吗?
让我们计算一下错误的数量:
FILENAME=$(echo $INFILE | grep -oE "[^/]+$")
Run Code Online (Sandbox Code Playgroud)
echo
不应用于任意数据。根据实现,如果$INFILE
以-
反斜杠开头或包含反斜杠或两者兼而有之,它将失败。$INFILE
。除非你有很好的理由,否则永远不应该不引用变量。grep
适用于它输入的每一行,而在这里您希望它只对整个字符串进行处理。$INFILE
是/some/dir/
or /
,那将返回空字符串而不是dir
or /
。-o
选项是特定于 GNU 的,因此它仅适用grep
于 GNU grep
。$INFILE
以换行符结尾,上述方法将不起作用。要获取文件的基本名称,有一个标准命令:
filename=$(basename -- "$infile")
Run Code Online (Sandbox Code Playgroud)
或者为了避免上面的(7):
filename=$(basename -- "$infile"; echo .); filename=${filename%??}
Run Code Online (Sandbox Code Playgroud)
或者,使用 shell 扩展运算符:
filename=${infile##*/}
Run Code Online (Sandbox Code Playgroud)
(仍然有上面的问题(4))。