| Summary: | ksh -n does not detect incorrect associative array declaration | ||
|---|---|---|---|
| Product: | Red Hat Enterprise Linux 7 | Reporter: | Paul Wayper <pwayper> |
| Component: | ksh | Assignee: | Siteshwar Vashisht <svashisht> |
| Status: | CLOSED WONTFIX | QA Contact: | BaseOS QE - Apps <qe-baseos-apps> |
| Severity: | low | Docs Contact: | |
| Priority: | low | ||
| Version: | 7.2 | CC: | jkejda |
| Target Milestone: | rc | ||
| Target Release: | --- | ||
| Hardware: | All | ||
| OS: | Linux | ||
| Whiteboard: | |||
| Fixed In Version: | Doc Type: | If docs needed, set a value | |
| Doc Text: | Story Points: | --- | |
| Clone Of: | Environment: | ||
| Last Closed: | 2017-07-11 14:23:10 UTC | Type: | Bug |
| Regression: | --- | Mount Type: | --- |
| Documentation: | --- | CRM: | |
| Verified Versions: | Category: | --- | |
| oVirt Team: | --- | RHEL 7.3 requirements from Atomic Host: | |
| Cloudforms Team: | --- | Target Upstream Version: | |
| Bug Depends On: | |||
| Bug Blocks: | 1298243, 1420851 | ||
I will move this bug upstream and close it as wontfix in RHEL7. |
Description of problem: ksh has the -n option to do a syntax test of the script and not actually execute it. This test does not detect and warn on incorrect associative array declaration, whereas execution of the script breaks at that point. Version-Release number of selected component (if applicable): 93u+ 2012-08-01 How reproducible: Always Steps to Reproduce: 1. Create the following scripts: $ cat ksh_array.ksh #!/usr/bin/ksh typeset -A fn fn=([foo_key]=foo_val [bar_key]=bar_val) printf %s\\n ${fn[foo_key]} ${fn[bar_key]} $ cat ksh_bad_array.ksh #!/usr/bin/ksh typeset -A fn fn=([foo_key]=foo_val [bar_key]) printf %s\\n ${fn[foo_key]} $ cat zsh_array.zsh #!/usr/bin/zsh typeset -A fn fn=(foo_key foo_val bar_key bar_val) printf %s\\n ${fn[foo_key]} ${fn[bar_key]} 2. Test: ksh -n ksh_array.ksh && echo result = $? ksh ksh_array.ksh 3. Test: ksh -n ksh_bad_array.ksh && echo result = $? ksh ksh_bad_array.ksh 4. Test: ksh -n zsh_array.zsh && echo result = $? ksh zsh_array.zsh Actual results: 2. Test passes and execution passes: $ ksh -n ksh_array.ksh && echo result = $? result = 0 $ ksh ksh_array.ksh foo_val bar_val 3. Test passes but execution fails: $ ksh -n ksh_bad_array.ksh && echo result = $? result = 0 $ ksh ksh_bad_array.ksh ksh_bad_array.ksh[4]: [bar_key]: not found [No such file or directory] 4. Test passes but execution fails: $ ksh -n zsh_array.zsh && echo result = $? result = 0 $ ksh zsh_array.zsh zsh_array.zsh: line 4: cannot append index array to associative array fn Expected results: 2. Test passes and execution passes: $ ksh -n ksh_array.ksh && echo result = $? result = 0 $ ksh ksh_array.ksh foo_val bar_val 3. Test fails and execution fails: $ ksh -n ksh_bad_array.ksh && echo result = $? ksh_bad_array.ksh[4]: [bar_key]: not found [No such file or directory] result = 1 $ ksh ksh_bad_array.ksh ksh_bad_array.ksh[4]: [bar_key]: not found [No such file or directory] 4. Test fails and execution fails: $ ksh -n zsh_array.zsh && echo result = $? zsh_array.zsh: line 4: cannot append index array to associative array fn result = 1 $ ksh zsh_array.zsh zsh_array.zsh: line 4: cannot append index array to associative array fn Additional info: As zsh is designed to be mostly identical to ksh in execution but has a different associative array declaration syntax, ksh -n should work as a test of whether we are trying to execute a ksh or zsh shell script.