我确实得到了关于这个主题的答案,但它还没有工作,所以请帮忙。
一段代码,其中我无法访问索引为变量i的字符串数组。我试图在相应的索引处插入一个值,但它不起作用。
i=0
declare -a str_arr
while read line
do
post=`echo $line| cut -d '|' -f2`
dept=`echo $line| cut -d '|' -f4`
str_arr[$i]="$dept|$post"
i=$(( i+1 ))
done< emp_info.dat
echo ${str_arr[@]}
我用管道运算符将两个变量插入到字符串数组中。
输出就像这样给出
> example.sh: 2: example.sh: declare: not found example.sh: 10:
> example.sh: str_arr[0]=aaaa|developer: not found example.sh: 10:
> example.sh: str_arr[1]=bbbb|tester: not found example.sh: 10:
> example.sh: str_arr[2]=Empower|Senior dev: not found example.sh: 10:
答案 0 :(得分:3)
在评论中提及@gordon-davisson时,Ubuntu 14.04中的默认shell为//print_r($_GET);
$q=$_POST['q'];
$query="SELECT *
FROM
viewlibrary
WHERE
studentname LIKE :q OR
matricno LIKE :q OR
title LIKE :q OR
programme LIKE :q OR
serialno LIKE :q
ORDER BY studentname ASC";
$stmt = $db->prepare($query);
$stmt->bindValue(':q','%'.$q.'%');
$stmt->execute();
$a = 0;
if($stmt->rowCount() > 0){
$r=$stmt->fetchAll();
echo "<table class='tablesorter' id='myTable' style='width:97%; table-border: 1'>";
echo "<thead>";
echo "<tr>";
echo "<th>No.</th>";
echo "<th>No.Matric</th>";
echo "<th>Name</th>";
echo "<th>Programme</th>";
echo "<th>Title</th>";
echo "<th>Serial Number</th>";
echo "<th>Availability</th>";
echo "<th>Edit</th>";
echo "<th>Delete</th>";
echo "</tr>";
echo "</thead>";
echo "<tbody>";
foreach($r as $row){
echo "<tr align='center'><td>". ($a+1) ."</td><td>". $row['matricno'] ."</td><td>". $row['studentname'] ."</td><td>". $row['programme'] ."</td><td>". $row['title'] ."</td><td>". $row['serialno'] ."</td><td>". $row['bavailable'] ."</td><td><a href='editpage.php?idstudent=".$row['matricno']."&idbook=".$row['serialno']."'><img src='pic/edit-icon.png' width=15px></a></td><td><a href='deletepage.php?idstudent=".$row['matricno']."&idbook=".$row['serialno']."'><img src='pic/remove-icon-png-15.png' width=15px></a></td></tr>";
$a++;
}
echo "</tbody>";
echo "</table>";
}
else{
echo "<p align='center'>Nothing to show you :( I am really sorry for this T_T </p>";
}
?>
而不是dash
,我可以从以下结果中确认:
bash
你需要将shebang $ ls -l /bin | grep sh
.
.
lrwxrwxrwx 1 root root 4 Feb 19 2014 sh -> dash
.
.
放在脚本的开头
执行它
#!/bin/bash
或像
一样执行/path/to/script
答案 1 :(得分:1)
顺便说一句,您的代码有多个错误和风格问题。
i=0
declare -a str_arr
# Notice IFS to use shell to parse line
# Notice -r to disable legacy behavior
while IFS='|' read -r _ post _ dept _
do
# Notice indent of loop body
str_arr[$i]="$dept|$post"
i=$(( i+1 ))
done< emp_info.dat
# Notice quoting
echo "${str_arr[@]}"
事实上,很多时候你应该只是在循环中读取它们时处理它们,而不是将它们累积到一个数组中,在这种情况下你可能根本不需要仅使用Bash的功能;但也许这是一个更大的程序的一部分,你确实需要通过数字索引随机访问所有值。
awk -F '|' '{ print $4 OFS $2 }' emp_info.dat