gpt4 book ai didi

bash - 避免修剪 bash $() 输出

转载 作者:行者123 更新时间:2023-11-29 09:09:54 24 4
gpt4 key购买 nike

来自 Bash 手册:

Bash performs the expansion by executing command and replacing the command substitution with the standard output of the command, with any trailing newlines deleted.

这意味着在处理带有有意义的尾随换行符的输出时,可能会出现模糊的错误。一个人为的例子:

user@host:~$ path='test

'
user@host:~$ touch -- "$path"
user@host:~$ readlink -fn -- "$path"
/home/user/test

user@host:~$ full_path="$(readlink -fn -- "$path")"
user@host:~$ ls -- "$full_path"
ls: cannot access /home/user/test: No such file or directory

关于如何在不丢失语义上有用的数据的情况下将命令的值分配给变量的任何提示?

Bash 的冒险将在新的一天继续!

最佳答案

您可以使用引号和 eval 来解决这个问题。将最后两个命令更改为:

full_path="'$(readlink -fn -- "$path"; echo \')"
eval ls -- "$full_path"

如果您想要在变量中使用尾随换行符的结果,您可以先添加一个伪造的字符(在本例中为下划线),然后将其删除。

full_path="$(readlink -fn -- "$path"; echo _)"
full_path=${full_path%_}
ls -- "$full_path"

关于bash - 避免修剪 bash $() 输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4376598/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com