这是我最简单的整个脚本。
getopts_test -s a -t b
我将此脚本作为pwd
但是,它始终会在Target:
前面打b
而从不for(i=0;i<BUF_SIZE;i++)
{
write(sockfd,plaintext[i],1);
if(plaintext[i]=='0')
break;
}
write(sockfd,'^',sizeof(char));
我在这里缺少什么?
答案 0 :(得分:4)
永远不会打印b
的原因是循环中的shift
会在第一次迭代后将处理后的选项移开,即在打印a
之后。使用shift $((OPTIND-1))
旨在访问可能的给定可变参数。当然,一旦删除shift
,targ
就会被重新分配到b
,并且${PWD}
不再包含在其中,因为您没有连接字符串(任何地方targ
和-t
的选项。
答案 1 :(得分:3)
@ glenn-jackman在评论中提出的替代方案 就是这样:
#!/bin/bash
src=""
targ=${PWD}
while getopts "s:t:" opt; do
case $opt in
s)
src=$OPTARG
echo "Source: $src"
;;
t)
targ=$OPTARG
echo "Target: $targ"
;;
esac
done
shift $((OPTIND-1)) # Turning to non-option arguments say a file name and so on.
在这里,您可以选择没有shift
的自然参数。