为什么这个 shell 脚本中的 basename 是必需的?
Why is basename in this shell script necessary?
我找到了这个 shell 脚本(</code>、<code>
是目录):
mv "" "" || exit # Make a subdirectory of
cd "/$(basename "")" || exit # Change directories for simplicity
for f in *; do
mv "$f" "${f%.*}.txt" # Add or change the extension
done
它将第二个目录移动到第一个目录中(因此第二个目录成为第一个目录的子目录)并且第二个目录中的所有文件都将具有“.txt”扩展名。我不明白为什么 cd "/"
不起作用 basename 没有从给定目录中删除文件名?有人可以解释一下这部分:
cd "/$(basename "")"
有效吗?另外 $2 需要用单独的引号 (""
) 因为 basename?
basename
删除前导目录信息。假设使用如下参数调用 sript:
$$> script usr/local/foo usr/local/bar
现在 </code> 等于 <code>usr/local/bar
。
如果只执行 cd /
,命令将如下所示:
cd usr/local/foo/usr/local/bar
但实际上应该是
cd usr/local/foo/bar
正在从 usr/local/bar
中删除此目录前缀是 basename
所做的。
https://www.geeksforgeeks.org/basename-command-in-linux-with-examples/
Also needs to be in separate quotes("") because of basename?
是的,外部扩展集 "/$(...)"
和内部扩展集 ""
都需要被引用以防止 word splitting 出现问题,否则会破坏命令</code> 包含空格(或 shell 全局字符)。</p>
<p>参见例如<a href="https://unix.stackexchange.com/q/118433/170373">Quoting within $(command substitution) in Bash</a> 在 unix.SE 了解详情。</p>
<p>(其实也应该是<code>cd -- "/$(basename -- "")"
来防范-
开头的filenames/paths。)
我找到了这个 shell 脚本(</code>、<code>
是目录):
mv "" "" || exit # Make a subdirectory of
cd "/$(basename "")" || exit # Change directories for simplicity
for f in *; do
mv "$f" "${f%.*}.txt" # Add or change the extension
done
它将第二个目录移动到第一个目录中(因此第二个目录成为第一个目录的子目录)并且第二个目录中的所有文件都将具有“.txt”扩展名。我不明白为什么 cd "/"
不起作用 basename 没有从给定目录中删除文件名?有人可以解释一下这部分:
cd "/$(basename "")"
有效吗?另外 $2 需要用单独的引号 (""
) 因为 basename?
basename
删除前导目录信息。假设使用如下参数调用 sript:
$$> script usr/local/foo usr/local/bar
现在 </code> 等于 <code>usr/local/bar
。
如果只执行 cd /
,命令将如下所示:
cd usr/local/foo/usr/local/bar
但实际上应该是
cd usr/local/foo/bar
正在从 usr/local/bar
中删除此目录前缀是 basename
所做的。
https://www.geeksforgeeks.org/basename-command-in-linux-with-examples/
Also needs to be in separate quotes("") because of basename?
是的,外部扩展集 "/$(...)"
和内部扩展集 ""
都需要被引用以防止 word splitting 出现问题,否则会破坏命令</code> 包含空格(或 shell 全局字符)。</p>
<p>参见例如<a href="https://unix.stackexchange.com/q/118433/170373">Quoting within $(command substitution) in Bash</a> 在 unix.SE 了解详情。</p>
<p>(其实也应该是<code>cd -- "/$(basename -- "")"
来防范-
开头的filenames/paths。)