[Discussion] POSIX, the Love of Backticks and All That Jazz


 
Thread Tools Search this Thread
Top Forums UNIX for Advanced & Expert Users [Discussion] POSIX, the Love of Backticks and All That Jazz
# 1  
Old 01-25-2017
[Discussion] POSIX, the Love of Backticks and All That Jazz

Quote:
Originally Posted by bakunin
Gladly so: first, get rid of the obnoxious backticks and use POSIX-means to do it:
bakunin
But I love my back-ticks - I know exactly how to escape them (after too many years) - I always seem to end unbalanced with ().

However, I shall take the hint. (One more trick for this dog... aka - not too old yet!) SmilieSmilie
# 2  
Old 01-25-2017
Quote:
Originally Posted by MichaelFelt
I always seem to end unbalanced with ().
You might want to try some formatting help in this case, when the subshell commands get more complex. This certainly helps me to keep track:

Code:
var=$( \
        command1 |\
        command2 |\
        command3 \
     )

I hope this helps.

bakunin
# 3  
Old 01-25-2017
You don't need to use a \newline.
Neither for $( ) that contains normal shell code that does not need to know it's within $( ),
nor for | that is one of the operators that work at the end of the line, expecting the operand on the next line.
You can even nest $( ), unlike the old ` ` where each more level needs some extra \escapes.
Code:
var=$(
  command1 |
  command2 |
  command3
  localvar=$(
    echo "hello world"
  )
)

This User Gave Thanks to MadeInGermany For This Post:
# 4  
Old 01-25-2017
Quote:
Originally Posted by MadeInGermany
You don't need to use a \newline.
Neither for $( ) that contains normal shell code that does not need to know it's within $( ),
nor for | that is one of the operators that work at the end of the line, expecting the operand on the next line.
Hmm, 20 years of using ksh and i didn't know that. That is embarrassing.

bakunin
# 5  
Old 01-26-2017
Bug

Then let me continue with lession#2.
Within $( ) there is a parser problem with the old style case statements.
Code:
#!/bin/bash
res=$(
  case $1 in
  1) echo 1;;
  esac
)
# syntax error in bash3 and ksh88
# workaround:
# (1) echo 1;;
echo "$res"

But bash4 and ksh93 have got a fix.
This User Gave Thanks to MadeInGermany For This Post:
# 6  
Old 01-27-2017
Quote:
Originally Posted by bakunin
Hmm, 20 years of using ksh and i didn't know that. That is embarrassing.

bakunin
Don't be. I have 38+ years on UNIX and I still use \ - because often - first I am assigning the "command" to a variable (as the string) and later am executing it (the variable). Same as I (must) do in files like configure.{ac|in}, Makefile, etc..

In short - better one \ too many that one short.
# 7  
Old 01-27-2017
I'm not sure on using backquotes is wrong per se.
$(command) are both `command` are both currently valid syntax and in standards.
Exception being, that actually backquotes should work on even the oldest shells (and new ones), while other form might not.

If i'm not mistaken backquotes are still the lowest common denominator for command substitution if you wish your scripts to work anywhere without touching

But today it's hard to find such shells as defaults or even existing on operating systems.
So i tend to write scripts using $(command) method, as well as promote such way.

Regards
Peasant.
Login or Register to Ask a Question

Previous Thread | Next Thread

9 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Nesting backticks

I'm trying to make a dialog window that prints the output of grep that takes the output of find. Unfortunately my nested backticks don't work. Here is the dialog window: dialog --stdout --title "test" --backtitle "test" --msgbox "Test:\n `grep -l "${tablica}" `find $string``" 16 60I think I... (2 Replies)
Discussion started by: Starting_Leaf
2 Replies

2. Shell Programming and Scripting

SSH and Backticks [solved]

I have been testing a new script and cannot figure out why my `cat spath` will not execute on the remote machine? sudo ssh -p 22344 -o "PasswordAuthentication no" -o "HostbasedAuthentication yes" -l testuser 192.168.1.6 "find `cat spath` -depth" cat: spath: No such file or directory but... (0 Replies)
Discussion started by: metallica1973
0 Replies

3. Shell Programming and Scripting

Help with remove backticks in a text file

Input file: 'data_1' 'data_10' 'data1311' '235data_13' Desired output: data_1 data_10 data1311 235data_13 Can I know how to remove back tick"'" in a file? Many thanks for advice. (3 Replies)
Discussion started by: perl_beginner
3 Replies

4. Red Hat

perl backticks: can't redirect output.

Hi everyone. This is a bit of a perl/linux mixed question. I am trying to redirect STDOUT of chsh by using the following line of perl code. system ("chsh -s /sbin/nologin $testing 1>/dev/null"); This should redirect STDOUT to /dev/null but it won't do that for some odd reason. Any ideas or... (6 Replies)
Discussion started by: austinharris43
6 Replies

5. Shell Programming and Scripting

Difference between using xargs and backticks

Hey all. Just a fast question, what is the technical difference between using back ticks and using xargs to perform a command? Here's an example Find /mydir -name *.conf |xargs rm Vs Rm 'find /mydir -name *.conf' Is there a performance hit? I know they do the same thing but which is... (1 Reply)
Discussion started by: msarro
1 Replies

6. Shell Programming and Scripting

Am I abusing backticks?

I'm always concerned I might be abusing backticks within my scripts. A current script I'm writing has this for example: stripscriptname=`echo $scriptname | sed 's/\(.*\)\..*/\1/'` stripsearch=`echo $searchpattern | tr -d ' ,/'` Both of these variables are set inside the script (in fact,... (2 Replies)
Discussion started by: mglenney
2 Replies

7. UNIX for Dummies Questions & Answers

sed: removing backticks from certain lines

Hi, I would like to change some lines in my mysql-dump, because there a syntax problems with some version of mysql. I 'd like to change USE ´someDatabase´; to USE someDatabase; (without backticks) using the sed command in the shell Thanks & best regards Bernd (5 Replies)
Discussion started by: bjb
5 Replies

8. Shell Programming and Scripting

Backticks within backticks?

Hi, I'm trying to do something like this: range= `expr `date '+%m'` - 1` and it does not work. How can I tell it to evaluate an expression within another expression evaluation? I was at first worried that `date '+%m'` would return a string but apparently expr does the math okay normally, so the... (3 Replies)
Discussion started by: jeriryan87
3 Replies

9. Shell Programming and Scripting

Perl - backticks v system in if statements

Can someone explain the difference between backticks and system when evaluated in these if statements: sub getDate { print "start date\n"; if ( system("/bin/date") ) { print "can't get date\n"; exit(2); } print "finish date\n"; } Returns the following: start date Thu... (5 Replies)
Discussion started by: gjkeenan
5 Replies
Login or Register to Ask a Question