是否有任何客观理由偏爱一种形式而不是另一种形式?性能、可靠性、便携性?
filename=/some/long/path/to/a_file
parentdir_v1="${filename%/*}"
parentdir_v2="$(dirname "$filename")"
basename_v1="${filename##*/}"
basename_v2="$(basename "$filename")"
echo "$parentdir_v1"
echo "$parentdir_v2"
echo "$basename_v1"
echo "$basename_v2"
Run Code Online (Sandbox Code Playgroud)
产生:
/some/long/path/to
/some/long/path/to
a_file
a_file
Run Code Online (Sandbox Code Playgroud)
(v1 使用 shell 参数扩展,v2 使用外部二进制文件。)
我有一个文件路径,/home/test/domain/example.txt
它的长度和文件扩展名也可以完全不同。例如:
/reallylongpath/example/longername.vb
Run Code Online (Sandbox Code Playgroud)
我需要删除扩展名“.” 之后,我需要删除除文件名以外的所有内容。上面的两个例子我需要example和longername。
我假设要转到最后一次出现的“/”,但不确定。
我希望使用 bash 来做到这一点。
我myVar在 bash 中有一个变量,其中包含一个长字符串,如下所示:
-rw-rw-rw- root/root 16 2018-02-12 10:03 foo_tar/baz1234_
Run Code Online (Sandbox Code Playgroud)
我想删除myVar最后一个斜杠(包括最后一个斜杠)之前的所有内容,这样myVar最终只存储baz1234_. 如何删除所有内容并将结果存储在变量中?
我遇到过处理 sed 的解决方案,但那些解决文件处理的问题,因此我的问题。