如何在复合 xargs 语句中设置 bash 变量
How to set a bash variable in a compound xargs statement
我正在寻找一种在传递给 xargs 的语句中设置变量的方法。该值将在其中一个命令中进行操作。使用文件或其他实用程序是一种选择,但我不确定为什么在序列中设置 bash 变量总是显示为空。
$ ls c*txt
codebase.txt consoleText.txt
$ ls c*txt | xargs -i bash -c "echo processing {}; v1={} && echo ${v1/txt/file}"
codebase.txt consoleText.txt
processing codebase.txt
processing consoleText.txt
上面的示例将问题提炼为基础知识。我期待行为是这样的,但是内联:
$ fname=codebase.txt; echo ${fname/txt/file}
codebase.file
谢谢。
此行正在将 ${v1/txt/file}
解析为命令执行前的值:
$ ls c*txt | xargs -i bash -c "echo processing {}; v1={} && echo ${v1/txt/file}"
这意味着 bash -c 甚至看不到 ${v1/txt/file}
在这一行中,单引号禁止变量替换,因此 echo processing {}; v1={} && echo ${v1/txt/file}
实际上作为参数传递给 bash -c:
$ ls c*txt | xargs -i bash -c 'echo processing {}; v1={} && echo ${v1/txt/file}'
您可以通过转义美元符号来完成同样的事情:
$ ls c*txt | xargs -i bash -c "echo processing {}; v1={} && echo ${v1/txt/file}"
我正在寻找一种在传递给 xargs 的语句中设置变量的方法。该值将在其中一个命令中进行操作。使用文件或其他实用程序是一种选择,但我不确定为什么在序列中设置 bash 变量总是显示为空。
$ ls c*txt
codebase.txt consoleText.txt
$ ls c*txt | xargs -i bash -c "echo processing {}; v1={} && echo ${v1/txt/file}"
codebase.txt consoleText.txt
processing codebase.txt
processing consoleText.txt
上面的示例将问题提炼为基础知识。我期待行为是这样的,但是内联:
$ fname=codebase.txt; echo ${fname/txt/file}
codebase.file
谢谢。
此行正在将 ${v1/txt/file}
解析为命令执行前的值:
$ ls c*txt | xargs -i bash -c "echo processing {}; v1={} && echo ${v1/txt/file}"
这意味着 bash -c 甚至看不到 ${v1/txt/file}
在这一行中,单引号禁止变量替换,因此 echo processing {}; v1={} && echo ${v1/txt/file}
实际上作为参数传递给 bash -c:
$ ls c*txt | xargs -i bash -c 'echo processing {}; v1={} && echo ${v1/txt/file}'
您可以通过转义美元符号来完成同样的事情:
$ ls c*txt | xargs -i bash -c "echo processing {}; v1={} && echo ${v1/txt/file}"