【发布时间】:2011-11-29 22:37:09
【问题描述】:
我不知道如何使用变量执行命令并获得结果。
我有很多 .h 和 .c 文件,我需要将每个文件从 ISO-8859 转换为 UTF-8。
所以我做:
ls | grep "\.[ch]" | xargs myscript.sh
在我的脚本中,文件名在变量$1 中。现在我需要执行
iconv -f ISO-8859 -t UTF-8 $1
并存储此结果,因为iconv 打印到标准输出。
result=`iconv -f ISO-8859 -t UTF-8 $1`
echo $result
这似乎不起作用,因为它给了我一些不匹配而不是转换的$1。
【问题讨论】:
-
“有些不匹配”?请引用您收到的确切错误消息。
-
这不是错误。它是更多文件的混乱内容,然后只有 1 美元,我不明白。
-
您
ls | grep ..发出的任何文件的文件名中有空格吗?那会把事情搞砸的。尝试在result=...中更改为“$1”,但您可能需要想出一种方法来处理文件名中的空格。请使用 $1 的适当示例值和打乱内容的确切文本来编辑您的问题。祝你好运。 -
如果您的文件小到可以捕获,那么您需要使用带有双引号的
echo "$result"来保留内部间距。如果没有双引号,您将获得单行输出,其中每个序列的一个或多个空格减少为一个空格。 -
规范是 How do I set a variable to the output of a command in Bash?。尽管标题不明确,但它涵盖了(变量)输入到外部命令(在(Bash)变量中)的情况。