c - 我如何遍历 bash 中的位置变量?

标签 c linux bash unix ubuntu

用户将给出他们想要的任意数量的位置参数(这些都是 C 程序)。我想让所有的 C 程序都能编译。但是,这是行不通的;有没有人有解决办法?

echo '#!/bin/bash' >> compile  
echo if [ "-o"='$1' ] >> compile  
echo then >> compile  
echo for (i=3; i<='$#'; i++) >> compile  
echo do >> compile  
echo gcc -o '$2' '${i}' >> compile  
echo fi >> compile  

最佳答案

不要使用一堆 echo语句,请使用 here-doc。在 << 之后在 token 周围加上引号防止在 here-doc 中扩展变量。

cat <<'EOF' >>compile
'#!/bin/bash'
if [ "-o" = "$1" ]
then  
    for ((i=3; i <= $#; i++))
    do  
        gcc -o "$2" "${!i}"
    done
fi
EOF

否则,您需要转义或引用所有特殊字符——您收到错误是因为您没有转义 <for()行。

其他错误:= 两边需要空格在[命令,你错过了donefor 的末尾环形。要间接访问变量,您需要使用 ${!var}语法。

遍历所有参数的常用方法是使用一个简单的:

for arg

循环。当没有 in 时在 for variable 之后,它循环遍历参数。您只需要删除 -o outputfile参数优先:

output=$2
shift 2 # remove first 2 arguments
for arg
do
    gcc -o "$output" "$arg"
done

关于c - 我如何遍历 bash 中的位置变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42310069/

相关文章:

linux - 从 linux 导出 WAS 配置文件

linux - 使用 GNU objcopy 从 Elf 生成可执行二进制文件

css - 任何 scss 文件更改时出现 node-sass 错误

linux - rpmbuild 需要 (rpmlib) - 自定义 rpm

c - 跟踪数据包通过内核 (linux)

c++ - 适用于 Windows 的可移植 C/C++ 应用程序的 DLL 依赖项

c - 为什么没有 strnchr 函数?

linux - 使用文件掩码删除 tmp 目录中的空文件

bash - 将 awk 结果存储在 bash 脚本的变量中

c - 如何仅使用指针反转字符串?