我最近正在查看一些让我感到困惑的代码,因为它可以工作,但我没想到它会如此。代码简化为这个例子
#!/bin/bash
for var;
do
echo "$var"
done
Run Code Online (Sandbox Code Playgroud)
使用命令行参数运行时会打印它们
$ ./test a b c
a
b
c
Run Code Online (Sandbox Code Playgroud)
这就是(对我而言)出乎意料的。为什么这不会导致错误,因为var
是 undefined ?使用这被认为是“良好做法”吗?
如果我只使用 basename {} .txt,它会起作用:
find . -iname "*.txt" -exec basename {} .txt \;
Run Code Online (Sandbox Code Playgroud)
它只会打印 xxx 而不是 ./xxx.txt
如果我想在 -exec 选项中使用 $(basename {} .txt) ,它将失败:
find . -iname "*.txt" -exec echo "$(basename {} .txt)" \;
Run Code Online (Sandbox Code Playgroud)
它只会打印 ./xxx.txt
我怎么解决这个问题?我希望我可以$(basename {} .txt)
用作其他 cmd 的参数。我必须用 xargs做sh -c
或管道-exec basename {} \;
吗?