sh -c 分叉子进程,其中变量不可见,请参阅 查尔斯回答 修复。
sh -c
获取变量的另一种技术 -exec sh -c 是用它作为参数。考虑
-exec sh -c
$ var=43 $ sh -c 'echo "$var"' # Expands to nothing $ sh -c 'echo "$1"' sh "$var" # Gets variable value into sh -c 43
注意第一个参数 sh -c 命令用作后 $0 内 sh -c (流程的名称)。
$0
适用于您的命令:
scan_var=43 find . -type f -name '*.docx' -exec sh -c ' scan_var=$1 shift for file do echo docx2txt "$file" 2>/dev/null - \ | grep -i --color "$scan_var" \ && printf "\033[1;32mFound in ${file}\033[0m\n" # readlink -f "$file" done ' sh "$scan_var" {} +
读入第一个参数的值 scan_var 然后将参数丢弃 shift 。
scan_var
shift
您试图在单引号内使用变量。 调整 grep 命令行:
grep
grep -i --color "'"$scan_var"'" && ...
这将关闭您的单引号 find -exec 之前 $scan_var 并为其余代码启动单引号。
find -exec
$scan_var