我有一个echo我想运行的命令(不是!),它采用绝对路径和相对路径。
我如何获得这两个参数?
试图:
d=/tmp/foo;
find "$d" -type f -exec bash -c 'echo d=${1:${#d}} 1="${1%/*}"' bash {} \;
Run Code Online (Sandbox Code Playgroud)
(我喜欢 GNU find 因为它是递归的,可以按文件限制,可以按文件名过滤,并且不会产生过多的 shell)
期待:
mkdir -p /tmp/foo/bar/can/haz; touch /tmp/foo/bar/can/haz/bzr.txt
# cmd is run, output is:
d=bar/can/haz 1=/tmp/foo/bar/can/haz
Run Code Online (Sandbox Code Playgroud) 我在 Ubuntu 服务器 16.04 xenial 中执行了以下代码:
mkdir -p /root/backups/{db, dirs}
Run Code Online (Sandbox Code Playgroud)
我记得在另一个系统中,它就像创建所有 3 个目录的魅力一样:
/root/backups/
/root/backups/db
/root backup/dirs
Run Code Online (Sandbox Code Playgroud)
然而这一次的结果是:
/root/backups/
/root/backups/{db,
Run Code Online (Sandbox Code Playgroud)
为什么这是部分的、破碎的结果?
这两种变量替换语法可以合二为一吗?
rm "$s_a/$domain.conf" 2>/dev/null
rm "$s_e/$domain.conf" 2>/dev/null
Run Code Online (Sandbox Code Playgroud)
喜欢:
rm "$s_{a,e}/$domain.conf" 2>/dev/null
Run Code Online (Sandbox Code Playgroud) 我正在对我的 POSIX shell 代码进行年度审查。
我可能发现了一个奇怪的行,我以前并不了解它:
[ $# -eq 3 ] && exit_code=$3 || exit_code=1
Run Code Online (Sandbox Code Playgroud)
exit_code=${3:-1}
Run Code Online (Sandbox Code Playgroud)
这两种方法在提供结果方面是否完全相同?
请详细说明是否有任何区别?